ReferenceError: 要求未定义(在我的休息 api 上)

Posted

技术标签:

【中文标题】ReferenceError: 要求未定义(在我的休息 api 上)【英文标题】:ReferenceError: require is not defined (on my rest api) 【发布时间】:2021-03-09 19:56:40 【问题描述】:

不起作用 嘿伙计们,我已经尝试了很多方法来解决这个问题,但我真的找不到答案。

我正在为我的网站制作一个休息 API 以做出反应,我对此很陌生...... 我正在尝试将我的 server.js 文件连接到我的 routes.js 文件,但它不会让我因为它无法识别 de“require”。

    import express from "express";
import cors from 'cors';
import mysql from 'mysql';
const routes = require('./routes');

app.use(cors());
const app = express();

const connection = mysql.createConnection(
    host: 'localhost',
    user: 'root',
    password: '',
    database: 'marioquiz'
);


app.use(express.json());
app.use(routes);
app.use('/User',routes);


app.get('/',(req,res)=>  res.send('O servidor esta a funcionar...'));

app.listen(5000);

然后返回这个错误:

file:///C:/Users/Mario/Desktop/Master/Backend/src/server.js:4

const routes = require('./routes');
           ^

ReferenceError: require is not defined
    at file:///C:/Users/Mario/Desktop/Master/Backend/src/server.js:4:16
    at ModuleJob.run (internal/modules/esm/module_job.js:146:23)
    at async Loader.import (internal/modules/esm/loader.js:165:24)
    at async Object.loadESM (internal/process/esm_loader.js:68:5)

【问题讨论】:

您不能使用 ESM 模块文件中的 require()。请改用import。如果您没有意识到,nodejs 中的模块是 CommonJS 或 ESM。 CommonJS 是原始类型的模块文件,使用require() 加载其他模块。较新的 JS 模块类型是 ESM,仅使用 import 加载其他模块。您只能是一种类型的文件,因此只能使用一种类型的语法来导入任何给定模块中的模块。该模块目前被指定为 ESM 模块,因此只能使用 import 来加载其他模块。 【参考方案1】:

require 关键字用于 CommonJS modules,但您似乎已将 Node.js 配置为使用 ECMAScript modules 运行您的应用程序。使用 ECMAScript 模块引入 routes 的等效方法类似于:

import  routes  from './routes.js';

请记住,您必须编写 routes.js 文件才能与 ECMAScript 模块兼容,例如:

const routes = [
  ...
];

export  routes ; 

【讨论】:

以上是关于ReferenceError: 要求未定义(在我的休息 api 上)的主要内容,如果未能解决你的问题,请参考以下文章

未捕获的 ReferenceError:未使用 react-chartjs.min.js 定义要求

未捕获的 ReferenceError:未定义要求(电子)

AngularJS、nodeJS、ReferenceError:未定义要求

Angular 2/webpack 中的“未捕获的 ReferenceError:未定义要求”

未捕获的 ReferenceError:在 Angular 2 webpack 全局库安装中未定义要求

ReferenceError: 导入外部js文件时未定义Vue