【发布时间】:2016-11-13 18:05:30
【问题描述】:
我的 nodejs 应用程序接受来自具有快速中间件强制执行权限的用户上传的文件,它使用multer。
典型的路由进行身份验证,检查用户是否被允许,然后进行导入,例如:
router.post('/:id/import', passport.authenticate('jwt', { session: false }), permit('admin'), function(req, res, next) {
MyClass.doImport(req.file.path).then(function(result) {
res.json(result);
}).catch(function(error) {
res.status(500).json(error);
});
});
当没有错误时,这很好用,导入功能会删除文件。但在出现错误的情况下(如无效或未经许可的用户),上传的文件会创建并保留在磁盘上。
在所有权限中间件成功运行之前,我不想在磁盘上创建任何文件。我尝试使用 multer 作为链条的末端,即:
var app = express();
app.use( // ...
app.use(passport.initialize());
app.use(multer({dest:'./tmp/'}).single('file'));
但是在身份验证错误时,我仍然会在 tmp.xml 中得到一个文件。
在所有其他中间件都通过之前,如何避免在磁盘上创建文件?
如果不可能,我是否可以添加一个仅在有文件附件并且上游出现错误时才运行的中间件功能?
【问题讨论】:
标签: node.js express passport.js multer