簡體   English   中英

請求和響應對象在移至函數(nodejs,express)時變得不確定

[英]Request and Response objects become undefined when moved to a function (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());

對這里發生的事情有任何想法嗎?

在將其用作回調時,您不應調用該函數,而應使用其名稱,以便傳遞一個可以在以后調用的函數引用。 在您的情況下,您將立即調用它並傳遞返回值,並且由於它不返回任何內容,因此原始代碼等於:

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

將函數體傳遞給它時,它應該可以正常工作:

router.get("/", getHelloPage);

TL; DR

它是getHelloPagegetHelloPage()作為回調函數。

快遞公司的路由器期望第二個參數是當路由與第一個參數匹配時要執行的函數,您的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;

無論如何在這種情況下沒有多大意義,而僅僅是一個示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM