這取決於回調函數內發生了什麼。考慮三個不同的例子:
一個)
const express = require('express');
const app = express();
app.get('/', (req, res, next) => {
console.log('1!');
res.json(true);
});
app.get('/', (req, res) => {
console.log('2!');
res.json(true);
});
app.listen(3000);
B)
const express = require('express');
const app = express();
app.get('/', (req, res, next) => {
console.log('1!');
});
app.get('/', (req, res) => {
console.log('2!');
res.json(true);
});
app.listen(3000);
C)
const express = require('express');
const app = express();
app.get('/', (req, res, next) => {
console.log('1!');
next();
});
app.get('/', (req, res) => {
console.log('2!');
res.json(true);
});
app.listen(3000);
在(a)中的情況下,工作流是頂TO-底部。第一個路由處理程序啓動,console.logs「1!」並回應true
。由於完整的響應已發送,所以永遠不會到達以下路由處理程序。
在(b)的情況下,執行暫停在第一個路由處理器。它既不響應也不允許執行進一步。如果你curl
這個應用程序,你會最終請求超時,但你會看到「1!」在控制檯上。
最後,在(c)的情況下,您可以看到next
函數調用。這使得Express進行執行並轉到下一個路由處理程序(如果有的話)。由於還有另一個路由處理程序,所以它會被執行,所以你最終得到「1!」和「2!」打印在控制檯上,以及正確發送的響應。
的幾點這裏:
- 隨時撥打
next
如果你希望另一路由處理當前後運行,而當你寫一箇中間件,或者在你的情況下,尤其重要的是, 「中間件」應用程序,你可能會添加到另一個應用程序,
- 可以在多個處理程序中建立響應,例如,當第一個聲明標頭和/或正文時,以及下一個添加一些標題和/或身體(這是奇怪的,我強烈勸阻你這樣做),並
- 一旦發送了響應,執行停止,並且不能到達其他路由處理程序(例如,當您使用條件塊時不能保證)。
爲什麼不試試呢? –
當然,但我也想要更多的理論信息,我在文檔中清楚地發現了一些困難,可能我錯過了某些idk。但如果你有一些信息,請提前致謝:) –