Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在node.js中使用全局变量_Javascript_Node.js - Fatal编程技术网

Javascript 在node.js中使用全局变量

Javascript 在node.js中使用全局变量,javascript,node.js,Javascript,Node.js,我有一个简单的例子: server = http.createServer(function(req, res) { uploads = {} if (req.url == '/check') { res.writeHead(200, {'content-type': 'text/plain'}); res.write(JSON.stringify(uploads)); res.end(); } if (req.u

我有一个简单的例子:

server = http.createServer(function(req, res) {
    uploads = {}
    if (req.url == '/check') {
        res.writeHead(200, {'content-type': 'text/plain'});
        res.write(JSON.stringify(uploads));
         res.end();
    }
    if (req.url == '/upload') {
        var form = new formidable.IncomingForm();
        form.on('fileBegin', function(field, file) {
            var tracker = {file: file, progress: [], ended: false};
            uploads[file.filename] = tracker;
            file.on('progress', function(bytesReceived) {
                tracker.progress.push(bytesReceived);
            })
        });
    };
});

为什么“检查”返回空上传?在这种情况下我应该使用全局变量吗?

upload
在每个请求上都被设置为空对象(
{}
),它总是
{}

请注意,该函数在所有请求上都被调用

全局变量在node.js中有特殊含义,因为所有模块都有一个局部作用域。 解决方案是在函数外部声明它

像这样

var uploads = {};
var server = http.createServer(function(req, res) {
   ....

我希望这能有所帮助

上传
在每次请求时都被设置为空对象(
{}
),它总是
{}

请注意,该函数在所有请求上都被调用

全局变量在node.js中有特殊含义,因为所有模块都有一个局部作用域。 解决方案是在函数外部声明它

像这样

var uploads = {};
var server = http.createServer(function(req, res) {
   ....

我希望这对您有所帮助

您的问题与全局变量无关-当在JavaScript中创建一个新变量时,它的前缀不带
var
,它是动态范围的AFAIK,这意味着它是全局变量。无论如何,如果您的变量确实是在函数之外声明的,我会感觉更好,因为它不仅是全局的,而且看起来也是全局的:

var uploads = {}
server = http.createServer(function(req, res) {
    if (req.url == '/check') {
    // ...
现在,让我们看看您真正的问题:您正在以一种非常奇怪的方式使用“强大”。一、 例如,我从未使用过
强大的.IncomingForm
on()
方法。我建议您使用
parse()
方法,它为您提供一个key-value对象,其中key是
字段的名称,value是上传文件数据,例如服务器中文件的路径:

if (req.url == '/upload') {
    var form = new formidable.IncomingForm();
    form.parse(req, function (err, fields, files) {
        for (var filename in files) {
          var file = files[filename];
          var tracker = {filename: filename, progress:[], ended:false};
          fs.readFile(file.path, function(err, filecontent) {
            tracker.progress.push(filecontent);
            tracker.ended = true;
          });
          uploads[filename] = tracker;
        }
        res.writeHead(200, {'content-type': 'text/html'});
        res.write("<A href='/'>ok</a>");
        res.end();

    });

就是这样,希望这有帮助。请注意,我假设您需要解决一个问题;但是,如果您想测试
IncomingForm.on()
方法,这个答案将没有多大用处。我希望我做出了正确的猜测:)

您的问题与全局变量无关-当在JavaScript中创建一个新变量时,没有前缀
var
,它是动态范围的AFAIK,这意味着它是全局变量。无论如何,如果您的变量确实是在函数之外声明的,我会感觉更好,因为它不仅是全局的,而且看起来也是全局的:

var uploads = {}
server = http.createServer(function(req, res) {
    if (req.url == '/check') {
    // ...
现在,让我们看看您真正的问题:您正在以一种非常奇怪的方式使用“强大”。一、 例如,我从未使用过
强大的.IncomingForm
on()
方法。我建议您使用
parse()
方法,它为您提供一个key-value对象,其中key是
字段的名称,value是上传文件数据,例如服务器中文件的路径:

if (req.url == '/upload') {
    var form = new formidable.IncomingForm();
    form.parse(req, function (err, fields, files) {
        for (var filename in files) {
          var file = files[filename];
          var tracker = {filename: filename, progress:[], ended:false};
          fs.readFile(file.path, function(err, filecontent) {
            tracker.progress.push(filecontent);
            tracker.ended = true;
          });
          uploads[filename] = tracker;
        }
        res.writeHead(200, {'content-type': 'text/html'});
        res.write("<A href='/'>ok</a>");
        res.end();

    });
就是这样,希望这有帮助。请注意,我假设您需要解决一个问题;但是,如果您想测试
IncomingForm.on()
方法,这个答案将没有多大用处。我希望我的猜测是正确的:)