我有节点应用程序,使用快递我的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的代码
答案 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/');
})