簡體   English   中英

在外部調用時會跳過nodejs中間件

[英]nodejs middleware is skipped when called externally

我對Express和Node相對較新,但這似乎是一個非常基本的需求,我正在努力了解它是如何發生的。 非常感謝您提供的解決問題或確定如何解決問題的幫助。

問題

var 
    express = require('express'),
    bodyParser = require('body-parser'),
    logger = require('morgan'),
    express = require('express'),
    app = express();

app.get('/heartbeat', function(req,res) {
    res.status(200).json(req.header('host'));
});

// my simple middleware component
app.use(function (req, res, next) {
    console.log('made it');
    next();
});
// standard middleware components
app.use(logger('dev'));
app.use(bodyParser.urlencoded({ extended: true })); 

// Start listener
app.listen(4400);

這個簡單的程序確實輸出了我的“ make it”控制台消息,但是當我將所有代碼(減去變量定義)包裝在一個名為start的函數中時:

var 
    express = require('express'),
    bodyParser = require('body-parser'),
    logger = require('morgan'),
    express = require('express'),
    app = express();

var start = function(config) { ... }
exports.start = start;

然后從一個單獨的模塊開始調用,我發現loggingbodyParser模塊似乎執行了,但是我的中間件組件被忽略了。 我正在拔頭發試圖找出原因。

我發現您的代碼有2個問題:

  1. 在調用app.get(...)之前必須先調用app.use(),否則不會調用任何中間件。

  2. 在自定義中間件中,您需要調用next()或next(error),以便將請求移至下一個中間件。 否則,服務器將永遠掛起。

如果在分離模塊后發布整個代碼,我可以幫助您發現更多問題:)

暫無
暫無

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

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