我一直在使用express和mongoDB設計node.js中的web應用程序,而且我發現我在腳本中聲明的任何變量都可供所有用戶訪問,因爲節點作爲單個線程運行。例如,我使用的是服務器端形式驗證器,這裏是一塊它:node.js中的變量「安全性」
app.post('/purchase', requireLogin, function(req, res) {
var b = req.body;
var ee;
for (i in b) {
if (!validatePresenceOf(b[i])) {
var ee="Please fill out all fields.<br />\n";
}
}
var exp = b.exp_mm+"/"+b.exp_yy;
var d = /^(0[1-9]|1[012])[- /.]\d\d$/
if (!d.test(expiration)) {
ee+="Expiration date is invalid.<br />\n"
}
if (!isValidCreditCard(b.card_type, b.card_num)) {
ee+="Credit card number is invalid.<br />\n";
}
});
如果另一個用戶進行購買在幾乎相同的時間,我想知道,可以變量b通過第二重新定義驗證者完成之前的請求?如果可以的話,那麼最好的解決辦法是什麼?每當我聲明一個變量時,這會發生什麼?看起來這可能會導致一些安全問題,如果變量在一個過程完成之前被更改。
謝謝!
確實是單線程的。這意味着一次只能運行一次js代碼。因此,您想象中的這些問題(函數並行運行兩次)不會發生,因爲一次只能運行一個代碼塊 – Raynos
@Raynos還存在詞法範圍的問題;) – jcolebrand