Javascript Expressjs中间件中定义的静态变量

Javascript Expressjs中间件中定义的静态变量,javascript,node.js,express,closures,Javascript,Node.js,Express,Closures,代码如下: var app = require('express')() app.get('/',function(req,res){ var flag = 0 console.log(flag) res.send('ok') flag ++ } app.listen(3001) 每次我请求url“/”时,它都会控制台“0”,这不是我首选的“plus plus”,我不想

代码如下:

   var app = require('express')()
   app.get('/',function(req,res){
            var flag = 0
            console.log(flag)
            res.send('ok')
            flag  ++
    }
    app.listen(3001)
每次我请求url“/”时,它都会控制台“0”,这不是我首选的“plus plus”,我不想将express中间件外部的变量定义为全局变量。您想告诉我如何像静态变量一样在中间件中使用variable plus吗

提前感谢您提出的这个小问题。

您可以使用app对象的locals属性,用于在应用程序中保持状态的变量

var app = require('express')();

app.locals.flag = 0;

app.get('/',function(req,res){
   console.log(app.locals.flag);
   res.send('ok');
   app.locals.flag++;
});

app.listen(3001);

不要在回调处理程序中声明/分配变量-在应用程序下面立即声明/分配变量,然后它应该可以工作。@AlexanderNied谢谢,但我不想在回调之外声明,我认为这是不专业的。在回调之外声明它不会使它成为全局的。节点将每个文件中的代码包装在其自己的函数中,以便在当前文件之外无法访问标志变量。如果您想使用var进一步限制它,您可以使用iLife,或者使用let,并将其包装在一个块中。@skille感谢它的有用,但是用“let”代替“var”,加号仍然不起作用只是将var更改为let不会解决任何问题,您仍然需要将变量移到函数外部。我提到let是因为将它包装在块范围内将是使用IIFE的替代方法。在实践中,我可能不会为这两个问题烦恼,因为它无论如何都不会是全局的。是的,这是一个好建议,使用闭包是否可以解决这个问题?不是真正的闭包,但你可以将它包装在一个生命中以实现类似的->。。。我宁愿使用当地人的财产,因为这是它的目的