Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.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 app.js如何使用其推荐的函数_Javascript_Node.js_Express - Fatal编程技术网

Javascript Node app.js如何使用其推荐的函数

Javascript Node app.js如何使用其推荐的函数,javascript,node.js,express,Javascript,Node.js,Express,我有一个使用express的节点应用程序,我有server.js app.js等 我需要使用以下代码作为中间件 var upload = multer({ storage: storage }); app.use(upload.single('file')); app.use('/', rot, function (req, res, next) { next(); }); 但是在varupload=multer…之前,我想运行以下命令 代码 我应该如何做得很好?在上传之前

我有一个使用express的节点应用程序,我有server.js app.js等

我需要使用以下代码作为中间件

var upload = multer({
    storage: storage
});

app.use(upload.single('file'));

app.use('/', rot, function (req, res, next) {
    next();
});
但是在var
upload=multer…
之前,我想运行以下命令 代码


我应该如何做得很好?在上传之前添加mkdir的代码

这样做更好

//dir.js

exports.makeDir = function(path) {

    console.log(path);
    try {
        fs.mkdirSync(path);
    } catch (e) {
        if (e.code != 'EEXIST') throw e;
    }
}
在你的app.js中

var varMkDir = require('./dir');


app.use(varMkDir.makeDir('uploads/'));
编辑:

app.use(function(){

    varMkDir.makeDir('uploads/');
})

您可以为此目的创建另一个中间件,因为
app.use
接受多个中间件功能

app.use(function(req, res, next) {
    fs.mkdir(path, function(e){
        if(!!e && e.code !== 'EEXIST'){
            next(e);
            return;
        }
        next();
    });
}, upload.single('file'));
上面的代码应该可以工作。当您将错误传递到
下一个
中间件时,express将知道跳过以下所有中间件功能,直接转到错误处理程序

编辑:我建议使用非同步版本的mkdir,并避免使用
try/catch

编辑2:也许我弄错了,你要做的就是确保
存储
目录存在?如果是这种情况,则只需执行以下操作即可:

mkdirSync(storage);

var upload = multer({
    storage: storage
});

app.use(upload.single('file'));

app.use('/', rot, function (req, res, next) {
    next();
});

谢谢,我试过了,但不起作用。我需要上传在mkdir之后完成,当我更改顺序时,我收到了错误…您想要创建的
是什么?上面的代码肯定会确保在上传之前调用mkdir,这就是express中间件的工作方式!好的,您能解释一下为什么建议使用异步版本吗?异步版本可以防止代码阻塞其他操作。如果您同时收到2个请求,并且正在运行某些同步代码,则在同步代码运行时,您将只能处理1个请求。您确定我可以在此处传递存储mkdirSync(存储)?这给出了一个错误。当我尝试它时,我得到了错误app.use()需要中间件函数
mkdirSync(storage);

var upload = multer({
    storage: storage
});

app.use(upload.single('file'));

app.use('/', rot, function (req, res, next) {
    next();
});