什么是“ var router = require('./ router / main')(app)”?

时间:2018-12-16 12:07:56

标签: node.js express

(我知道stackoverflow中有一个类似的问题,但我听不懂该问题的评论。)

我是韩国中学生。 所以我的英语不好,但是请帮助我。

我正在通过示例代码研究Node.js和Express.js。 这是我正在查看的示例代码。

var express = require("express");
var app = express();
var bodyParser = require("body-parser");
var session = require("express-session");
var fs = require("fs");

app.set("views", __dirname + "/views");
app.set("view engine", "ejs");
app.engine("html", require("ejs").renderFile);

var server = app.listen(3000, function() {
    console.log("Express server has started on port 3000");
});

app.use(express.static("public"));

app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use(session({
    secret: '@@SEC$$RET##',
    resave: false,
    saveUninitialized: true
}));

var router = require("./router/main")(app, fs)

我已经理解了这段代码的大部分内容,但是我不明白最后一行的“(app,fs)”。

那是什么意思? 如果您帮助我,我将不胜感激。ㅠㅠ

2 个答案:

答案 0 :(得分:1)

它从该文件导入路由器。路由器要求您传递2个参数-app和fs。与调用常规函数相同。就在这里,它是导入路由并在一处调用函数。

答案 1 :(得分:1)

这意味着./router/main模块导出接受应用程序实例和fs模块作为参数的factory function并返回取决于这些参数的路由器实例,例如:

var express = require('express');

module.exports = (app, fs) => {
  var router = express.Router();
  // define router routes that make use of `app` and `fs`
  return router;
};

这种路由器工厂功能基本上实现了dependency injection模式。

app参数是将应用程序实例传递到路由器的常见Express配方,而无需传递fsfs模块可以直接导入./router/main模块中,它从依赖注入中受益不大。