繁体   English   中英

无法使用 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有区别看看: module.exports vs. export default in Node.js 和 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);
  }
};

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

默认情况下,Node JS 根据 CommonJS 标准使用模块。 导入 - 是 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": ""
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM