关于方法声明和调用的参数不一致的困惑
发布于 11 年前 作者 xanogayu 3553 次浏览 最后一次编辑是 8 年前

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这三个参数如何传进来,传进来的参数究竟是什么?

十分感谢!

3 回复

看来你还很不了解回调的机制, 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 传给了 serverserver 会在内部执行 initViews(req, res, next),其中 nextserver 内部的另一个函数。

回到顶部