繁体   English   中英

"Express 错误 - TypeError: Router.use() 需要中间件功能但得到了一个对象"

[英]Express error - TypeError: Router.use() requires middleware function but got a Object

当我运行 npm start 来运行我的 express 应用程序时,我收到了这个错误。

TypeError: Router.use() requires middleware function but got a Object

我在Kop4lyf的评论中找到了答案:

检查您的 users.js。 如果您可以尝试,它也应该像 index.js 一样导出路由器。

然而,当我遇到这个问题时,这个问题是我的最佳搜索结果,所以我正在推广一个答案。


该错误是因为您的路由模块之一未导出 - 这意味着 Express 在尝试识别您的所有路由时无法访问它。

您可以通过添加module.exports = router;来解决此问题module.exports = router; 到每个路由文件的末尾。

例子:

var express = require('express');
var router = express.Router();

router.get('/', function(req, res, next) {
     //Do whatever...
});

module.exports = router;

关于module.exports更多信息可以在这个问题官方 Node.js 文档中找到

我通过添加我在某处使用的来解决这个问题。 所以请检查您的所有出口。

module.exports = router;

如果在路由中使用

exports default router

您的解决方案可以是

module.exports = router

您的 index.js 文件很好,您只需创建users.js并导出它。

   let express = require('express');
   let router = express.Router();

  //Login Page - GET REQUEST
   router.get('/login',(req,res)=> {
      res.send('login page');
  })


  //Register Page - GET REQUEST
  router.get('/register',(req,res)=> {
     res.send('register page');
  });

  module.exports = router;
in every module  **export the router** and **keep one handler for the default 
path '/'**

// in index.js
const authRoute = require("./routes/authRoute");

app.use("/auth", authRoute);


// in authRoute.js

const express = require("express");
const router = express.Router();
router.get("/", (req, res) => {
    // code
 });

module.exports = router;

我有同样的错误,通过用app.use('view engine', 'ejs')替换app.use('view engine', 'ejs')app.set('view engine', 'ejs') 作为参考,我使用了这个网页Migrating from 3.x to 4.x

我不必对 index.js 或 application.js 进行任何更改。 有关 EJS 的更多信息,可以参考Using EJS with Express and Express 4.x API

当您忘记导出使用路由器的模块时会出现此错误。

您提到的代码经过一些调整后可以完美运行。

如果您的 app.js 是应用程序的主要/起点。

它应该有

const port = process.env.PORT || 3000;
app.listen(port, () => console.log(`Listening on port ${port}...`));

代替

module.exports = app;

(可选)通常 index.js 用于应用程序的起点。 将 index.js 重命名为 helloworld.js 并在 require 语句中更改相同

var routes = require('./routes/index');

var routes = require('./routes/helloworld');

使用以下命令运行此应用程序

node app.js

如果你已经检查了所有的解决方案而不是也有这个错误而不是检查这个

出现此错误的另一个原因是调用了不存在或未导出的方法。 就我而言,我正在调用登录方法,但我忘记定义它们

我试图调用这个方法

app.post('/api/login', db.login);

但我忘了创建登录方法,所以我收到了这个错误。 还尝试检查拼写错误可能是您输入了错误的拼写

我遇到了同样的问题,然后我发现我的一个控制器中缺少这一行!

return api; //它可能是您代码的return router

我将此行添加到我的代码中,并且运行良好。

哇,我的问题是我在做 module.exports = { router } 而不是 module.exports = router

经过一番折腾终于找到了! 由于一切语法正确,编写的代码没有错,这是由于尚未编写的代码! 如果您已实现 index.js 但尚未实现 users.js,则可能会发生这种情况。 但是,您已经定义了两行 app.use('/', routes); app.use('/users', 用户); 如果您渴望立即测试 index.js,而无需等待 users.js 的实现。 这正是它出错的时候。

如果您仍然面临这个问题并尝试所有解决方案,那么只需用路由替换路由器,它就可以正常工作

对于使用 ejs 的任何人:在我的情况下,我收到此错误,因为我使用了 app.use("view engine","ejs") 而不是 app.get("view engine","ejs")。

"

我通过删除app.use(/users, users);修复它app.use(/users, users);

我现在不需要这个,所以也许这就是它开始破裂的原因。

暂无
暂无

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

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