0
多個路由器的方法共享變量讓我們假設用戶點擊URL域/ REST /音樂/頁= 2在快遞
然後在後臺,我有其他快遞路由器:
app.use('/rest', restRouter);
地方休息路由器是這樣的
var express = require('express');
var restRouter = express.Router();
對於這個問題。如果我的路由器有以下幾種方法:
restRouter.get('*', createRequestInstance);
restRouter.get('*', findUser);
restRouter.get('/music/*', getMusicList);
我想創建一些對象變量,通過解析算法和收集數據流過程中。但如果我在createRequestInstance
中創建這個對象,我不知道我怎麼能把它傳遞給findUser
或getMusicList
。 我寧願不修改req
和res
對象或使用表達本機技術。我想先準備好一切,然後建立迴應。
我看到下面的問題
- 我不能定義函數定義的變量之外,因爲它會在所有請求共享。我希望每個請求都有一個唯一的對象。
- 函數只接受
req
,res
,next
params。而且即使綁定,我也沒有看到如何增強它的方式。 - 我不能調用下一個函數manualy,因爲它是通過
next
調用的,所以我不能在裏面傳遞額外的參數。
表達方式是有一個私有變量'req._data = {}',並在請求通過中間件堆棧時構建它。你能告訴我你爲什麼反對修改'req'嗎? –
當然,如果你有更多的作者,更多的路由器,並且你想分離每個路由器/方法的數據,所以它不會被意外損壞。我會說這可能是通常的做法,你可以爲下一個方法添加一些params/obj。我肯定有人不得不考慮這個,例如,當他比較'async'和'express' –
嗯......只是讓你知道這正是'res.locals'所做的。它使它們成爲所有可以訪問'res'的路由器/中間件/方法的全局類型,並且不用提及所有視圖(如果有的話)。對於每個請求都有一個唯一對象,在'app/server.js'或其等價物上有'count'。然後,所有可以訪問'count'的路由/中間件/方法都可以爲每個請求創建一個唯一對象。我相信,你也應該對'res.locals'做同樣的事情。 –