Javascript Node app.js如何使用其推荐的函数
我有一个使用express的节点应用程序,我有server.js 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…之前,我想运行以下命令 代码 我应该如何做得很好?在上传之前
var upload = multer({
storage: storage
});
app.use(upload.single('file'));
app.use('/', rot, function (req, res, next) {
next();
});
但是在varupload=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();
});