Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当移动到函数(nodejs、express)时,请求和响应对象变得未定义_Javascript_Node.js_Express - Fatal编程技术网

Javascript 当移动到函数(nodejs、express)时,请求和响应对象变得未定义

Javascript 当移动到函数(nodejs、express)时,请求和响应对象变得未定义,javascript,node.js,express,Javascript,Node.js,Express,我试图使用快速路由器分离我的路线,但是我遇到了一个问题。出于某种原因,当我在.get方法中声明一个匿名函数时,它就起作用了。但是,一旦我定义了自己的函数并将其传入,请求和响应对象就会变得未定义 这很有效 var express = require("express"); var router = express.Router(); router.get("/", function(request, response, next){ console.log("getting the he

我试图使用快速路由器分离我的路线,但是我遇到了一个问题。出于某种原因,当我在.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());

你知道这里发生了什么吗?

在将函数用作回调函数时,不应该调用它,而应该使用它的名称,以便传递一个函数引用,以后可以调用它。在您的情况下,您立即调用它并传递返回值,由于它不返回任何内容,您的原始代码等于:

getHelloPage();
router.get("/", undefined); 
当您将函数体传递给它时,它应该可以正常工作:

router.get("/", getHelloPage);

TL;博士
它是作为回调函数的
getHelloPage
getHelloPage()
相比。

express的路由器期望的第二个参数是当路由与第一个参数匹配时执行的函数,getHelloPage函数不返回函数,执行时函数不返回任何内容,什么意思没有定义

您可以使用一个函数返回一个带有预期参数的函数

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;

无论如何,在本例中没有太多意义,但这只是一个示例。

我不知道Javascript。谢谢,现在可以用了