参数 express 不能用 require 传递

Parameter express can't be passed with require

app.js

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

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

app.listen(3000);

router.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(app.js)(这样我就不会在 router.js 中重新声明 express 和 app 变量)。

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

router.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的use方法需要三个参数的回调,而不是app本身,所以你需要这样:

在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");
});

这种方法不需要包括 express router 但这可能不适用于大型项目我建议您阅读 express router 文档:

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