【发布时间】:2011-09-12 20:14:27
【问题描述】:
我一直在用 express 和 mongoDB 在 node.js 中设计一个 Web 应用程序,我突然想到,我在脚本中声明的任何变量都将可供所有用户访问,因为 node 作为单线程运行。例如,我正在使用服务器端表单验证器,这里是其中的一部分:
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 还有词汇范围的问题;)
标签: javascript node.js express