捕获mongoose saveAsync错误

时间:2016-06-15 00:50:31

标签: javascript express mongoose promise bluebird

我正在尝试将文件上传到静态文件夹,并使用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子句捕获。但这并没有发生..程序只是在无处丢失......

我哪里弄错了?任何帮助表示赞赏!

0 个答案:

没有答案
相关问题