节点app.js使用函数如何推荐

时间:2016-02-08 14:36:03

标签: javascript node.js express

我有节点应用程序,使用快递我的server.js app.js等

我需要使用以下代码作为middelware

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

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

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

但在var upload = multer...之前我想运行以下内容 代码

var mkdirSync = function (path) {
    try {
        fs.mkdirSync(path);
    } catch(e) {
        if ( e.code != 'EEXIST' ) throw e;
    }
}


mkdirSync( 'uploads/');

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

2 个答案:

答案 0 :(得分:0)

您可以为此目的创建另一个中间件,因为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'));

以上代码应该有效。当您将错误传递到next中间件时,Express将知道跳过以下所有中间件函数并直接转到错误处理程序。

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

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

mkdirSync(storage);

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

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

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

答案 1 :(得分:-1)

最好这样做。

// 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/');
})