CNode

新手问题,参数位置不能改变

Hhappywowwow发布于12 年前最后回复12 年前5 回复5096 浏览0 收藏
var aa = function(err, req, res, next) {
        res.render('error', {
            message: err.message,
            error: err
        });
    };
if (app.get('env') === 'development') {
    app.use(aa);
}

以上第一行的代码,是不是不能交换参数位置成为以下的代码

var aa = function( req, err, res, next) {
        res.render('error', {
            message: err.message,
            error: err
        });
    };

为什么这个参数位置是err, req, res, next固定的? 以及另外一个function( req, res, next)也是不能换位置的? 不知道为什么

还有,可以解释一下next的作用么?举个例子?

查看回复

回复 (5)

O
orlla#1·12 年前

1、位置不能变换,因为js是通过位置index来判断是什么参数的,后面的参数可以不写,但是顺序不可变化,等你自己写给别人用的函数的时候就知道了; 2、next是回调函数呀,当这个函数的工作做完了,可以继续下一个任务了呀 这样就可以传递下去

H
happywowwow#2·12 年前
var aa = function(err, req, res, next) {
        res.render('error', {
            message: err.message,
            error: err
        });
     next();
    };
if (app.get('env') === 'development') {
    app.use(aa);
}```
那为什么不这么写,就是给aa里面加上这个回调next
J
jx-zhou#3·12 年前

这些内置的核心模块的参数已经是确定了的,肯定是不能改变的,除非你自己写模块。如果你说为啥不这样写?这个你就要去问模块开发人了- -。

H
hanzel21cn#4·12 年前

位置不能改变,这个属于js范畴,好好加强一下基础知识

W
whatsmynick#5·12 年前

理论上可以, 仿angularjs的机制实现一个包装函数, 把调用函数toString后取出参数重排整理. 每次都包一下, 或者注入app.use里.

参与回复
登录后即可参与回复。登录