Javascript 捕获mongoose saveAsync错误
我试图上传一个文件到一个静态文件夹,并使用mongoose将条目信息保存到mongodb。一种可能的情况是,只有一个任务可以工作,然后我需要恢复已完成的任务。设计的工作流程是先上传文件,上传后将数据保存到数据库。代码如下:Javascript 捕获mongoose saveAsync错误,javascript,express,mongoose,promise,bluebird,Javascript,Express,Mongoose,Promise,Bluebird,我试图上传一个文件到一个静态文件夹,并使用mongoose将条目信息保存到mongodb。一种可能的情况是,只有一个任务可以工作,然后我需要恢复已完成的任务。设计的工作流程是先上传文件,上传后将数据保存到数据库。代码如下: Promise.promisifyAll(mongoose); /** * Upload file * @property {string} req.body.filename * @property {tar file}
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命令:
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服务时,程序就挂起了。我的意图是测试错误处理,在这种情况下上载成功但保存失败。我的理解是,承诺链中发生的任何错误都应该被catch子句捕获。但那没有发生。。程序不知从哪里丢失了
我哪里出错了?感谢您的帮助