【发布时间】:2018-12-20 00:41:51
【问题描述】:
我正在使用 React-Redux-Express,我正在尝试使用 express-fileupload 上传图片。这是我在我的 Express 服务器中上传图片的逻辑:
在我的 Express 路线中,我使用 Sequelize 执行此操作
router.put('/:id', function(req, res, next) {
models.Projects.update(
{
title: req.body.title,
img: req.body.img,
description: req.body.description,
},
{
returning: true,
plain: true,
where: {
id: req.params.id,
},
}
)
.then(() => {
if (req.files) {
req.files.imgFile.mv(toRelative(req.body.img), function(err) {
if (err) {
throw new Error('Image saving failed');
}
});
}
})
.then(() => {
models.Projects.findById(req.params.id).then((result) => {
return res.send({
Project: result,
});
});
})
.catch((error) => {
return res.send(String(error));
});
});
问题是最后一个then是在req.files.imgFile.mv方法完成移动图片之前触发的,所以React输入组件在前端找不到。
有谁知道如何在第一个 then 中创建一个承诺,所以只有当 req.files.imgFile.mv 完成移动图像时才会触发第二个?
谢谢!
【问题讨论】:
-
我认为您在
req.files.imgFile.mv(toRelative(req.body.img), function(err) { if (err) { throw new Error('Image saving failed'); } });中缺少第二个回调结果。 -
在then里面放一个promise。
-
您是否尝试过在第二个然后在 req.files.imgFile.mv 的回调中执行您尝试运行的代码?
标签: javascript node.js express promise sequelize.js