无法使用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.exportsexport有区别看看: 在您的 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": ""
}