我有一個端點,express.js有條件地在中間件回呼之間進行選擇以執行:
const middleware1 = require('./m1')
const middleware2 = require('./m2')
app.get('/call', async (req, res) => {
if (req.code === 'something') {
middleware1.call
} else if (req.code === 'something else') {
middleware2.call
} else {
res.send({
done: "done"
})
}
})
中間件1
module.exports = {
call : async function(req, res, next) {
// does some async stuff with req
// sends it as response
res.send({data: "data"})
}
}
類似的想法middleware2。問題是一次middleware1或中間件2`被稱為請求沒有關閉。但是,如果作為測驗,我洗掉條件陳述句并立即呼叫一個中間件,如下所示:
app.get('/call', middleware1.call);
這立即起作用,這是為什么呢?我一定做錯了什么。
uj5u.com熱心網友回復:
您可能需要這樣做:
const middleware2 = require('./m2')
app.get('/call', async (req, res, next) => {
if (req.code === 'something') {
middleware1.execute(req, res, next); // you were not calling the method
} else if (req.code === 'something else') {
middleware2.execute(req, res, next);
} else {
res.send({
done: "done"
})
}
})
module.exports = {
// call is the reserved keyword use something different
execute : async function(req, res, next) {
// does some async stuff with req
// sends it as response
res.send({data: "data"})
}
}
res.send應該發回回應,但是,在您的情況下,似乎沒有發生對任何中間件的呼叫。在內部,res.send確實會呼叫 next 來發回回應并應該發送它。
uj5u.com熱心網友回復:
嘗試添加next()到中間件的末尾。這樣請求就會被傳遞到堆疊中的下一個函式。有關中間件的更多資訊,請單擊此處撰寫用于 Express 應用程式的中間件。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/452184.html
標籤:javascript 节点.js 表示 中间件
