简体   繁体   English

无法在 node/express js 中导入模块

[英]Can't import module in node/express js

I am getting an error when importing files into my node js server file.将文件导入我的节点 js 服务器文件时出现错误。 I usually do it in this way and all the paths are correct so I'm not sure what the error is.我通常以这种方式执行此操作,并且所有路径都是正确的,因此我不确定错误是什么。

import express from 'express'
import mongoose from 'mongoose'

import data from '../data.js'
import Page from "../models/pageModel.js";

const app = express()
mongoose.connect(process.env.MONGODB_URL || 'mongodb://localhost/note-guard', {
  useNewUrlParser: true,
  useUnifiedTopology: true,
  useCreateIndex: true,
});

app.get('/', (req, res) => {
    res.send('Server is ready');
  });
app.use('/api/pages/:id', async (req, res) => {
  const createdPages = await Page.insertMany(data.pages);
  console.log(createdPages);
  res.send("test");
})

const port = process.env.PORT || 5002;
app.listen(port, () => {
  console.log(`Serve at http://localhost:${port}`);
});

This is the error I get:这是我得到的错误:

internal/process/esm_loader.js:74
    internalBinding('errors').triggerUncaughtException(
                              ^

Error [ERR_MODULE_NOT_FOUND]: Cannot find module '/Users/charlielamb/Desktop/learnCode/note-guard/data.js' imported from /Users/charlielamb/Desktop/learnCode/note-guard/backend/server.js
    at finalizeResolution (internal/modules/esm/resolve.js:265:11)
    at moduleResolve (internal/modules/esm/resolve.js:699:10)
    at Loader.defaultResolve [as _resolve] (internal/modules/esm/resolve.js:810:11)
    at Loader.resolve (internal/modules/esm/loader.js:88:40)
    at Loader.getModuleJob (internal/modules/esm/loader.js:241:28)
    at ModuleWrap.<anonymous> (internal/modules/esm/module_job.js:56:40)
    at link (internal/modules/esm/module_job.js:55:36) {
  code: 'ERR_MODULE_NOT_FOUND'
}

Any help?有什么帮助吗?

To be able to use import expression in nodejs you should add following line to your package.json file: "type": "module" .为了能够在 nodejs 中使用import表达式,您应该在 package.json 文件中添加以下行: "type": "module" it's after "main": "index.js" and before: "scripts" section.它在"main": "index.js"和之前: "scripts"部分。 On the other hand you should use const express = require('express') type of expressions另一方面,您应该使用const express = require('express')类型的表达式

Also you should have the right structure of your project for package.json to be able recognize all your files as "module"此外,您应该为 package.json 拥有正确的项目结构,以便能够将所有文件识别为“模块”

right:

root - client
          - package.json for client
     - server
          - package.json for server

wrong:

root - client
          - package.json
     - server
     - package.json

In order to help you I made a video about this https://youtu.be/NAq3P_QCcOg为了帮助你,我制作了一个关于这个https://youtu.be/NAq3P_QCcOg的视频

在此处输入图片说明

server.js , data.js and models are in the same path. server.jsdata.jsmodels在同一路径中。 Fix the import paths:修复导入路径:

import express from 'express'
import mongoose from 'mongoose'

import data from './data.js'
import Page from "./models/pageModel.js";

const app = express()
mongoose.connect(process.env.MONGODB_URL || 'mongodb://localhost/note-guard', {
  useNewUrlParser: true,
  useUnifiedTopology: true,
  useCreateIndex: true,
});

app.get('/', (req, res) => {
    res.send('Server is ready');
  });
app.use('/api/pages/:id', async (req, res) => {
  const createdPages = await Page.insertMany(data.pages);
  console.log(createdPages);
  res.send("test");
})

const port = process.env.PORT || 5002;
app.listen(port, () => {
  console.log(`Serve at http://localhost:${port}`);
});

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

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