expressjs 不会在 Parse 查询(parse-server)上抛出错误

expressjs not throwing error on Parse queries (parse-server)

我在 expressjs 上设置了解析服务器,例如 here

但有时它不会显示 Parse 函数内部的错误。示例:

// Parse Server is setup
// Parse Server plays nicely with the rest of your web routes
app.get('/', function(req, res) {
  var pageQuery = new Parse.Query('Page');
  pageQuery.get('id').then(function(page) {
    someObject.undefinedProp = false;
    res.send(page);
  }, function(error) {
    res.send(error);
  });
});

没有显示错误,但使用此代码:

// Parse Server is setup
// Parse Server plays nicely with the rest of your web routes
app.get('/', function(req, res) {
  someObject.undefinedProp = false;
  res.send('ok');
});

我显示了这个错误:

ReferenceError: someObject is not defined

(对于此示例,我的配置与 Parse Server Example 完全相同)

我只想在我的 Parse 函数中显示错误。

有什么想法吗?

感谢您的帮助!

你的问题其实是Promises引起的问题

当您调用 pageQuery.get('id') 时,get 方法 returns 一个 Promise 实例。 Promise 的 then 方法是您设置将在 get 操作成功完成时触发的回调的方式。

为了获得对当您尝试引用 someObject.undefinedProp 时应该发生的错误的引用,您还需要通过调用它的 Promise object 设置错误处理程序catch 方法。

app.get('/', function(req, res) {
  var pageQuery = new Parse.Query('Page');

  pageQuery.get('id').then(function(page) {
    someObject.undefinedProp = false; 
    // the error thrown here will be caught by the Promise object
    // and will only be available to the catch callback below
    res.send(page);

  }, function(error) {
    // this second callback passed to the then method will only
    // catch errors thrown by the pageQuery.get method, not errors
    // generated by the preceding callback
    res.send(error);

  }).catch(function (err) {
    // the err in this scope will be your ReferenceError
    doSomething(err);
  });
});

在这里,查看以下文章并向下滚动到部分标题 "Advanced mistake #2: catch() isn't exactly like then(null, ...)"。

https://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html