【问题标题】:Unable to import module in nodejs using ES6 Modules无法使用 ES6 模块在 nodejs 中导入模块
【发布时间】:2021-12-08 23:53:06
【问题描述】:

我刚刚开始学习 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'

【问题讨论】:

  • 您使用的是什么版本的 Node.js?你能给我们看看 package.json 文件吗?
  • 嗨@TsvetanGanev,目前我使用的是v12.18.3,我应该更新这个吗?

标签: node.js nodes node-modules es6-modules


【解决方案1】:

您是否尝试在异步上下文中运行该函数?

例如:

import { connectMongoDB } from "./config/db";
    
(async () => {
    await connectMongoDB();
})();

【讨论】:

  • 我试过但没用
【解决方案2】:

module.exportsexport有区别看看:module.exports vs. export default in Node.js and ES6 在您的 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);
  }
};

【讨论】:

  • 非常感谢您提供的链接,但它不起作用
【解决方案3】:

我浏览了 Node 的文档,发现当我们使用 ES6 导入模块时,我们需要定义扩展名为“.mjs”而不只是“.js”的文件,并且在导入我还提到的函数时像这样的扩展 - import { connectMongoDB } from "./config/db.mjs"; 效果很好

【讨论】:

    【解决方案4】:

    默认情况下,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": ""
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-26
      • 2019-04-23
      • 1970-01-01
      • 1970-01-01
      • 2017-01-04
      • 2017-01-10
      • 2018-11-12
      • 2021-08-31
      相关资源
      最近更新 更多