将javascript作用域与节点中的expressjs一起使用的正确方法

将javascript作用域与节点中的expressjs一起使用的正确方法,javascript,node.js,express,scope,function-parameter,Javascript,Node.js,Express,Scope,Function Parameter,我正在努力学习JavaScript和全堆栈开发,但我还不能完全理解如何正确地将express与JavaScript结合使用 我的问题是这样的: 在网上看到的每一篇教程iv'e中,都使用了以下语法: app.get('/',function(request,response,next){ var something = request.body.something; if(something){do stuff...} else{do other stuff...} }) 如果我不想使

我正在努力学习JavaScript和全堆栈开发,但我还不能完全理解如何正确地将express与JavaScript结合使用

我的问题是这样的:

在网上看到的每一篇教程iv'e中,都使用了以下语法:

app.get('/',function(request,response,next){

 var something = request.body.something;
 if(something){do stuff...}
 else{do other stuff...}

})
如果我不想使用匿名函数,而是预定义的命名函数呢

我将如何在express方法中使用它们

像这样的东西行吗

function doStuffwithTheRequest(request,response,next){

 var something = request.body.something;
 if(something){do stuff...}
 else{do other stuff...}

};


app.get('/',doStuffwithTheRequest(req,res,next));
如果是这样,以这种方式传递参数的正确方法是什么

Iv'e尝试过这样编码,但我似乎无法将预定义的参数传递给函数


我得到了上述问题的答案,但我想再看一个问题的附加内容


我将如何从如下内容中取出内部回调函数:

function doStuffwithTheRequest(req,res,next){

 Somemiddleware.someMethod({parameter:req.session.value},function(err,returningparameter){

 res.locals.info = returningparameter;
 if(something){do stuff...}
 else{do other stuff...}

 })
};

app.get('/',doStuffwithTheRequest);
一旦我取出它,就会抛出一个错误:


res没有定义

按照您的方式,您正在调用没有参数的命名函数。您应该只传递函数本身:

app.get('/',doStuffwithTheRequest);

只需确保函数定义具有正确的参数(req、res、next),就像在您的示例中一样。

只需将最后一行更改为
app.get('/',dostuffWithRequest)
(即删除括号)谢谢,这很有效…在前一行的基础上附加了一个问题…因为app.get()只需要函数定义。如果您将其称为“dostuffWithRequest(req,res,next)”,那么您将立即执行该函数并将结果(nothing)传递回app.get()。很抱歉,“dostuffWithRequest(req,res,nex)”就是一个例子。我的意思是,如果您将括号添加到“dostuffWithRequest”,您将立即在那里调用函数,而不是将函数定义传递到app.get()。抱歉,我的速度太慢了,但这与匿名函数有何不同?不是立即执行吗?不是。按您尝试的方式添加括号和参数相当于:app.get('/',function(request,response,next){…}())。请注意末尾额外的一组括号。执行此操作将执行匿名函数并将其返回值发送到app.get()。关闭最后一组括号,就是将函数本身传递给app.get()。无论是匿名函数还是命名函数,都是一样的。谢谢!!!我想我必须深入研究js函数和函数调用。。。