请求和响应对象在移动到一个函数时变得不确定(nodejs,express)

我试图使用快速路由器分开我的路线,但是我遇到了一个问题。 出于某种原因,当我在.get方法中声明一个匿名函数时,它是有效的。 但是,一旦我定义了我自己的函数并将其传入,请求和响应对象就变得不确定了。

这工作

var express = require("express"); var router = express.Router(); router.get("/", function(request, response, next){ console.log("getting the hello page"); response.send("hello"); }); module.exports = router; 

然而这失败了

 var express = require("express"); var router = express.Router(); function getHelloPage(request, response, next) { console.log("getting the hello page"); response.send("hello"); } router.get("/", getHelloPage(request, response, next)); module.exports = router; 

甚至尝试只是有:

 router.get("/", getHelloPage()); 

任何想法在这里发生了什么?

在使用函数作为callback函数时,您不应该调用该函数,而应该使用它的名称,以便传递稍后可以调用的函数引用。 在你的情况下,你马上调用它并传递返回值,因为它不返回任何东西,你的原始代码等于:

 getHelloPage(); router.get("/", undefined); 

它应该工作得很好,当你传递函数体:

 router.get("/", getHelloPage); 

TL; DR

它是getHelloPagegetHelloPage()作为callback函数。

expression式的路由器期望作为第二个参数是当第一个参数与路由匹配时执行的函数,你的getHelloPage函数没有返回一个函数,你的函数执行时什么都不返回,什么意思是undefined。

你可以做的是一个函数返回一个函数与预期的参数。

 var express = require('express'); var router = express.Router(); function getHelloPage(str) { return function(request, response, next) { console.log('message : ', str); response.send(str); } } router.get('/', getHelloPage('some message')); module.exports = router; 

无论如何,在这种情况下没有太多的意义,但只是一个样本。