1

我正在使用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”变量)。当我为变量赋值时,我应该得到错误,但它不会发生。

4

1 回答 1

1

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

随处使用是标准做法strict mode,通常在 .js 文件的顶部声明。

于 2015-06-16T01:46:34.540 回答