charlietlamb
charlietlamb

Reputation: 131

Can't import module in node/express js

I am getting an error when importing files into my node js server file. 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?

Upvotes: 2

Views: 14970

Answers (2)

user15388024
user15388024

Reputation:

server.js, data.js and models are in the same path. 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}`);
});

Upvotes: 0

Arire Weekwood
Arire Weekwood

Reputation: 29

To be able to use import expression in nodejs you should add following line to your package.json file: "type": "module". it's after "main": "index.js" and before: "scripts" section. On the other hand you should use const express = require('express') type of expressions

Also you should have the right structure of your project for package.json to be able recognize all your files as "module"

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

enter image description here

Upvotes: 2

Related Questions