所以我开始研究javascript,来自.net背景我找到了以下代码:
File express.js:
var express = require('express');
module.exports = function() {
var app = express();
require('../app/routes/index.server.routes.js')(app);
return app;
};
文件index.server.routes.js:
module.exports = function(app) {
var index = require('../controllers/index.server.controller');
app.get('/', index.render);
};
正如本书所解释的那样,index.server.routes.js具有此功能(app),而app是用于配置的快速对象(它正在配置' /'路径)。没关系。
我不明白的是以下语法:
require('../app/routes/index.server.routes.js')(app);
我的理解是他将app参数传递给index.server.routes.js模块,这个模块正在设置get。
但是,我可以解释一下这种语法是如何工作的吗?来自.net背景,在我看来是一个演员(非常奇怪和令人困惑)。
答案 0 :(得分:1)
语法是调用函数的语法。 index.server.routes.js
导出一个函数,因此可以调用它。认为它与:
var routes = require('../app/routes/index.server.routes.js')
routes(app) // routes is a function
Express中常见的是将app
实例作为一种显式依赖注入形式传递。
答案 1 :(得分:0)
这很简单。当您在Node.js中调用require
时,Node将加载模块(文件),并返回通过module.exports
属性导出的模块。在这种情况下,它导出了一个函数。
因此,require
为您提供了一个函数,因此您可以通过将括号放在require
语句之后立即调用它。
代码相当于这样做:
var routesFn = require('../app/routes/index.server.routes.js')
routesFn(app)