【问题标题】:Error: Cannot find module './api/routers'错误:找不到模块“./api/routers”
【发布时间】:2020-05-11 03:58:01
【问题描述】:

嗨,

希望你们一切都好...

我正在尝试开发 NextJS 单页 Web 应用程序。对于 nextJs 自定义服务器,我使用 Express、MongoDB,此外,使用 nodemon 进行热重载。 如果我启动服务器,它会显示错误(错误:找不到模块'./api/routers')模块找不到,最后应用程序崩溃了。但是我创建了 api/routers 文件夹和文件,还创建并导出了 express 路由器功能。

const router = require("express").Router();

router.get("/all", (req, res) => {
  res.json({ message: 'It's working...' });
})

module.exports = router;

请在下面讲述我的文件夹结构和服务器设置。 我做的服务器设置有什么问题吗?

请帮助我认识@all,专家级开发人员。

const express = require('express')
const next = require('next')
const bodyParser = require('body-parser')
const port = process.env.PORT || 3000
const dev = process.env.NODE_DEV !== 'production' //true false
const nextApp = next({ dev })
const handle = nextApp.getRequestHandler() //part of next config

const db = require("mongoose")
const routers = require("./api/routers")

// const mongoose = require("mongoose")
// const db = mongoose.connect('mongodb://localhost:27017/Profile',{ useUnifiedTopology: true, useNewUrlParser: true })

const db_uri = "mongodb://localhost:27017/profile"


nextApp.prepare()
  .then(() => {
    const app = express()
    app.use(bodyParser.json())
    app.use(bodyParser.urlencoded({ extended: true }))

    app.use('/api', routers)

    app.all('*', (req, res) => {
      return handle(req, res)
    })
    app.listen(port, err => {
      if (err) {
        throw err
      } else {
        db.connect(db_uri,
          { useUnifiedTopology: true, useNewUrlParser: true }, () => {
            console.log("Database Connected...");
            console.log(`> Server is running on http://localhost:${port}`)
          })
      }
    })
  })
  .catch((ex) => {
    console.error(ex.stack);
    process.exit(1);
  })

请在此处查看文件夹结构和 nodemon json 设置

控制台也出错

【问题讨论】:

  • 我认为您需要专门导入路由器文件,例如require('./api/routers/routers')

标签: javascript node.js reactjs express next.js


【解决方案1】:
const express = require('express')
const next = require('next')
const bodyParser = require('body-parser')
const port = process.env.PORT || 3000
const dev = process.env.NODE_DEV !== 'production' //true false
const nextApp = next({ dev })
const handle = nextApp.getRequestHandler() //part of next config

const db = require("mongoose")
const routers = require("./api/routers") // there's no index.js

// const mongoose = require("mongoose")
// const db = mongoose.connect('mongodb://localhost:27017/Profile',{ useUnifiedTopology: true, useNewUrlParser: true })

const db_uri = "mongodb://localhost:27017/profile"


nextApp.prepare()
  .then(() => {
    const app = express()
    app.use(bodyParser.json())
    app.use(bodyParser.urlencoded({ extended: true }))

    app.use('/api', routers)

    app.all('*', (req, res) => {
      return handle(req, res)
    })
    app.listen(port, err => {
      if (err) {
        throw err
      } else {
        db.connect(db_uri,
          { useUnifiedTopology: true, useNewUrlParser: true }, () => {
            console.log("Database Connected...");
            console.log(`> Server is running on http://localhost:${port}`)
          })
      }
    })
  })
  .catch((ex) => {
    console.error(ex.stack);
    process.exit(1);
  })

默认情况下,如果找不到模块,require 将假定存在一个 index.js 文件,从而可以导入为./api/routers,您引用的目录不包含 index.js(x) .

要么直接引用./api/routers/router,要么创建索引文件。

编辑:index.jsx 位于你的 server/api 目录中,不需要额外的 ./api,否则它实际上看起来像:./server/api/api/routers/router,这不是你要找的。

【讨论】:

  • @AsMdHabibullah 您能否将您的 routers.jsx 的内容添加到您的原始答案中
  • 当然,const routers = require("express").Router(); routers.get("/all", (req, res) => { res.json({ hello: 'world' }); }) module.exports = routers;
  • 我不敢相信我错过了,抱歉,路径必须是 ./routers/router,而不是 ./api/routers/router。我会更新我原来的答案。
  • 它不像你给定的路径。同样的问题,现在说找不到路径。
  • 很难判断 index.jsx 所在的路径,请尝试显式引用扩展名以便 /api/routers/router.jsx
【解决方案2】:

这不起作用,因为您尝试导入文件夹而不是包含这些路由的文件

const routers = require("./api/routers")

试试这个

const routers = require("./api/routers/router")

【讨论】:

  • 我将 router.jsx 文件更改为 index.jsx 但它不起作用。
  • 我写的答案怎么样,你试过了吗? @AsMdHabibullah
  • 我已经尝试过这样--> const routers = require("./api/routers/router") 它也不起作用。同样的错误,找不到模块。
  • 尝试将路由器文件转换为.js文件
  • 我更改了所有服务器设置,现在它可以正常工作了...谢谢开发人员。
猜你喜欢
  • 2018-10-29
  • 2012-07-13
  • 2018-12-30
  • 1970-01-01
  • 2016-12-20
  • 1970-01-01
  • 2019-06-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多