我正在尝试将文件上传到静态文件夹,并使用mongoose将条目信息保存到mongodb。一种可能的情况是只有一个任务可以工作,然后我需要恢复完成的任务。设计的工作流程是先上传文件,然后在上传文件后将数据保存到db。这是代码:
Promise.promisifyAll(mongoose);
/**
* Upload file
* @property {string} req.body.filename
* @property {tar file} req.file
*/
function _upload(req, res) {
return new Promise((resolve, reject) => {
multerMiddleware(req, res, err => {
if (err) {
reject(err);
}
resolve(req.body);
});
});
}
/**
* Create new entry
* @property {string} req.body.name
* @returns {Entry}
*/
function create(req, res, next) {
let entry;
_upload(req, res)
.then(body => {
entry = new Entry({
name: body.name
});
debug(`start to saving entry`);
return entry.saveAsync();
});
}).then(savedEntry => {
debug(savedEntry);
entry = savedEntry;
res.json(savedEntry);
}).catch(e => {
// TODO: if save failed, remove file
console.error(e);
return next(e);
});
}
const router = express.Router(); // eslint-disable-line new-cap
router.route('/')
/** POST /api/entries - create new entry */
.post(create);
卷曲命令:
curl -i -F "name=w69325" -F "file=@entry_file.tar" http://localhost:3000/api/entrys
响应:
HTTP/1.1 100 Continue
// after a while
curl: (52) Empty reply from server
然而,当我在调用api之前停止mongo服务时,程序就会挂起。我的目的是测试错误处理,在这种情况下上传成功但保存失败。我理解在promise链中发生任何错误都应该被catch子句捕获。但这并没有发生..程序只是在无处丢失......
我哪里弄错了?任何帮助表示赞赏!