无法使用ES6模块在nodejs中导入模块
Unable to import module in nodejs using ES6 Modules
我刚刚开始学习 Node.js,我正在尝试将我的应用程序连接到 MongoDB 数据库。
这里 Server.js 是我的主文件,只有两行
import { connectMongoDB } from "./config/db";
connectMongoDB();
我试图从文件 db.js 导入我的函数 connectMongoDB,这里是 db.js
的内容
import config from "config";
import mongoose from "mongoose";
const mongoDBUri = config.get("mongoDBUri");
export const connectMongoDB = async () => {
try {
await mongoose.connect(mongoDBUri, {
useNewUrlParser: true,
});
console.log("MongoDB connected");
} catch (error) {
console.log(
"[Error] MongoDB did not get connected due to issue " + error.message
);
process.exit(1);
}
};
文件位置对我来说似乎是正确的
我尝试使用 require 而不是 import 并且效果很好。
抛出错误 -
Error [ERR_MODULE_NOT_FOUND]: Cannot find module 'C:\Users\bisht\Project\DHH\dhh\config\db' imported from C:\Users\bisht\Project\DHH\dhh\server.js
[0] Did you mean to import ../config/db.js?
[0] at finalizeResolution (internal/modules/esm/resolve.js:259:11)
[0] at moduleResolve (internal/modules/esm/resolve.js:636:10)
[0] at Loader.defaultResolve [as _resolve] (internal/modules/esm/resolve.js:726:11)
[0] at Loader.resolve (internal/modules/esm/loader.js:97:40)
[0] at Loader.getModuleJob (internal/modules/esm/loader.js:243:28)
[0] at ModuleWrap.<anonymous> (internal/modules/esm/module_job.js:47:40)
[0] at link (internal/modules/esm/module_job.js:46:36) {
[0] code: 'ERR_MODULE_NOT_FOUND'
您是否尝试过 运行 在异步上下文中使用该功能?
例如:
import { connectMongoDB } from "./config/db";
(async () => {
await connectMongoDB();
})();
module.exports
和export
有区别看看:
在您的 db.js 文件中,尝试更改导出的函数,如下所示:
exports.connectMongoDB = async () => {
try {
await mongoose.connect(mongoDBUri, {
useNewUrlParser: true,
});
console.log("MongoDB connected");
} catch (error) {
console.log(
"[Error] MongoDB did not get connected due to issue " + error.message
);
process.exit(1);
}
};
我浏览了 Node 的文档,发现当我们使用 ES6 导入模块时,我们需要定义扩展名为“.mjs”的文件,而不仅仅是“.js”,同时导入函数 i还提到了这样的扩展 -
import { connectMongoDB } from "./config/db.mjs";
效果很好
默认情况下,Node JS 根据 CommonJS 标准使用模块。 import - 是 ES6 标准。 ES6 运行需要配置package.json。添加一对:"type": "module".
示例:
{
"name": "index.js",
"version": "1.0.0",
"main": "index.js",
"type": "module",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"description": ""
}
我刚刚开始学习 Node.js,我正在尝试将我的应用程序连接到 MongoDB 数据库。 这里 Server.js 是我的主文件,只有两行
import { connectMongoDB } from "./config/db";
connectMongoDB();
我试图从文件 db.js 导入我的函数 connectMongoDB,这里是 db.js
的内容import config from "config";
import mongoose from "mongoose";
const mongoDBUri = config.get("mongoDBUri");
export const connectMongoDB = async () => {
try {
await mongoose.connect(mongoDBUri, {
useNewUrlParser: true,
});
console.log("MongoDB connected");
} catch (error) {
console.log(
"[Error] MongoDB did not get connected due to issue " + error.message
);
process.exit(1);
}
};
文件位置对我来说似乎是正确的
我尝试使用 require 而不是 import 并且效果很好。 抛出错误 -
Error [ERR_MODULE_NOT_FOUND]: Cannot find module 'C:\Users\bisht\Project\DHH\dhh\config\db' imported from C:\Users\bisht\Project\DHH\dhh\server.js
[0] Did you mean to import ../config/db.js?
[0] at finalizeResolution (internal/modules/esm/resolve.js:259:11)
[0] at moduleResolve (internal/modules/esm/resolve.js:636:10)
[0] at Loader.defaultResolve [as _resolve] (internal/modules/esm/resolve.js:726:11)
[0] at Loader.resolve (internal/modules/esm/loader.js:97:40)
[0] at Loader.getModuleJob (internal/modules/esm/loader.js:243:28)
[0] at ModuleWrap.<anonymous> (internal/modules/esm/module_job.js:47:40)
[0] at link (internal/modules/esm/module_job.js:46:36) {
[0] code: 'ERR_MODULE_NOT_FOUND'
您是否尝试过 运行 在异步上下文中使用该功能?
例如:
import { connectMongoDB } from "./config/db";
(async () => {
await connectMongoDB();
})();
module.exports
和export
有区别看看:
exports.connectMongoDB = async () => {
try {
await mongoose.connect(mongoDBUri, {
useNewUrlParser: true,
});
console.log("MongoDB connected");
} catch (error) {
console.log(
"[Error] MongoDB did not get connected due to issue " + error.message
);
process.exit(1);
}
};
我浏览了 Node 的文档,发现当我们使用 ES6 导入模块时,我们需要定义扩展名为“.mjs”的文件,而不仅仅是“.js”,同时导入函数 i还提到了这样的扩展 -
import { connectMongoDB } from "./config/db.mjs";
效果很好
默认情况下,Node JS 根据 CommonJS 标准使用模块。 import - 是 ES6 标准。 ES6 运行需要配置package.json。添加一对:"type": "module".
示例:
{
"name": "index.js",
"version": "1.0.0",
"main": "index.js",
"type": "module",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"description": ""
}