【问题标题】:What is wrong with Nodejs?Nodejs 有什么问题?
【发布时间】:2015-08-31 15:28:03
【问题描述】:

我正在使用multer 处理上传图片。

app.use(multer({ dest: './public/photos',
    rename: function (fieldname, filename) {
        return filename+Date.now();
    },
    onFileUploadStart: function (file) {
        console.log(file.originalname + ' is starting ...')
    },
    onFileUploadComplete: function (file) {
        console.log(file.fieldname + ' uploaded to  ' + file.path)
        //a='asass';
        done=true;
    }
}));

app.post('/api/photo',function(req,res){
  if(done==true){ //ERROR here if I remove comment on 'a=asass' >> 'done' is not defined
    console.log(req.files);
    console.log(req.body);
    res.end("File uploaded.");
  }
});

我没有在任何地方声明“完成”变量,为什么这段代码仍然有效?如果我删除对“a = asass”的评论,我会在上面得到错误。 (我不在任何地方声明“a”变量)。当我为变量赋值时,我应该得到错误,但它没有发生。

【问题讨论】:

  • 当你说你没有在任何地方声明done时你错了。你用done = true 声明了它。在javascript中,done = true 声明一个全局变量done,而var done = true 声明一个本地变量done
  • 虽然您没有正确声明done,但您还是为它分配了一个值。作为默认行为,如果未找到所分配名称的变量,则将其建立为全局变量。 What is the function of the var keyword and when to use it (or omit it)?
  • @VoThanhThang:这是一个有趣的问题。你确定这就是正在发生的事情。据我所知。它对代码没有任何影响。
  • @slebetman,对不起,我的错误,我已经删除了我的评论。非常感谢您的解释。

标签: node.js express runtime-error middleware multer


【解决方案1】:

done=true 所做的是声明一个名为 done 的全局变量。为了使它不是全局变量,请使用 var 关键字,例如var done = true。声明全局变量通常被认为是一个坏主意。 JavaScript 有一个可选模式strict mode,它可以防止你意外声明全局变量https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Strict_mode

在任何地方都使用strict mode 是标准做法,并且通常在 .js 文件的顶部声明。

【讨论】:

    猜你喜欢
    • 2012-08-26
    • 1970-01-01
    • 1970-01-01
    • 2018-08-19
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    • 2023-02-16
    • 1970-01-01
    相关资源
    最近更新 更多