【问题标题】:Parameter express can't be passed with require参数 express 不能用 require 传递
【发布时间】:2022-01-05 12:11:42
【问题描述】:

app.js

const express = require("express");
const app = express();

app.use("/", require("./routers.js")(app));

app.listen(3000);

路由器.js

module.exports = function (app) {
  console.log(app);
  app.get("/", (req, res) => {
    res.json(5);
  });
};

控制台给出的错误是:“TypeError: Router.use() requires a middleware function but got an undefined”

我不明白为什么我不能通过路由器传递 express 应用程序(app.js)(这样我就不会在 router.js 中重新声明 express 和 app 变量)。

【问题讨论】:

  • 第二个代码块是routers.js吗?如果是这样,请edit您的问题并标记它。当您使用它时,将最后一句中的引用更改为 routers.js 以匹配代码(或将两者都更改为 router.js)。一致性和拼写在编程中非常重要。
  • 顺便说一句,我解决了在 router.js 中返回 app 变量的问题。所以在 module.exports 末尾的 router.js 中,我只写:return app.但是如果您知道解决问题的其他方法会很好:)

标签: javascript node.js express parameter-passing require


【解决方案1】:

不要将应用传递给路由更好地创建一个新的路由器并传递给应用。

路由器.js

const express = require("express");
const router = express.Router();
router.get("/", (req, res) => {
  res.json(5);
});
module.exports = router;

app.js

app.use("/", require("./routers.js"));

正如您在评论中提到的,您不必添加内部 app.use

module.exports = function (app) {
  app.get("/", (req, res) => {
    res.json(5);
  });
};

// app.js
require("./routers.js")(app);

【讨论】:

  • 我的目标是不实例化一个新的 express 变量。这就是为什么我在 app.js 中将 express 作为参数传递的原因。如果有可能,我不这样做......在我的问题的第一个答案中,@joseluis fernandez mateo 说使用exports.method = ...但这不像我所做的那样具有可扩展性。 :(
  • @antoniosalzano 我已经更新了我的答案,请检查
【解决方案2】:

Express的使用方法需要三个参数的回调,而不是应用本身,所以你需要这样的:

在 routes.js 中

exports.doSomeThing = function(req, res, next){
    console.log("Called endpoint");
    res.send("Called endpoint");
}

在你的 index.js 中

const Express = require("express");
const app = Express();
const routes = require("./routes");

app.use("/", routes.doSomeThing);

app.listen(3030, () => {
    console.log("Listening on port 3030");
});

这种方法不需要包含快速路由器,但这对于大型项目可能并不合适,我建议您阅读快速路由器文档:

https://expressjs.com/es/guide/routing.html#express-router

【讨论】:

    猜你喜欢
    • 2016-02-01
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    • 2020-12-02
    • 2015-06-04
    相关资源
    最近更新 更多