Hi everyone 我在看Ghost的server.js时看到这样一个函数声明:
function initViews(req, res, next) {
var hbsOptions;
if (!res.isAdmin) {
// self.globals is a hack til we have a better way of getting combined settings & config
hbsOptions = {templateOptions: {data: {blog: ghost.blogGlobals()}}};
if (ghost.themeDirectories[ghost.settings('activeTheme')].hasOwnProperty('partials')) {
// Check that the theme has a partials directory before trying to use it
hbsOptions.partialsDir = path.join(ghost.paths().activeTheme, 'partials');
}
server.engine('hbs', hbs.express3(hbsOptions));
server.set('views', ghost.paths().activeTheme);
} else {
server.engine('hbs', hbs.express3({partialsDir: ghost.paths().adminViews + 'partials'}));
server.set('views', ghost.paths().adminViews);
}
next();
}
而他的调用方式是 server = express(); server.use(initViews);
不明白req, res, next这三个参数如何传进来,传进来的参数究竟是什么?
十分感谢!
看来你还很不了解回调的机制, initViews是一个函数, 回调这个函数的时候会传给他3个参数, req, res, next 其实你也可以arguments[0], arguments[1]… 这样
initViews
function is a express framework middleware.
req
,res
and next
arguments is provided by the express framework.
签名 《Node.js 服务器框架开发实战》 http://url.cn/Pn07N3
function initViews(req, res, next) {
// ...
next();
}
server.use(initViews);
简化一下代码可能容易理解一些。
initViews(req, res, next)
是你声明的一个函数,它接受 req
res
next
三个参数。
调用 server.use(initViews)
的时候,initViews
传给了 server
,server
会在内部执行 initViews(req, res, next)
,其中 next
是 server
内部的另一个函数。