【问题标题】:FeathersJS Error Handler Unexpected Token < IssueFeathersJS 错误处理程序意外的令牌 < 问题
【发布时间】:2017-09-19 05:38:48
【问题描述】:

我正在使用 MongoDB 开发 Express 应用程序,并尝试将 FeathersJS 用于我的所有服务。在这里,我正在运行一个测试,尝试从服务器向客户端获取错误消息,但我对来自错误处理程序的响应有疑问。我的 req 标头具有正确的 application/json 内容,所以我认为错误处理程序应该发回有效的 json。

我知道我没有在我的函数中使用下一个回调,但是当我尝试这样做时,它会给出相同的错误,所以我认为它与错误处理程序有关。任何方向都将不胜感激!

第一个错误日志在服务器上,是正确的。

Bucket Services
error >>>>> Bucket validation failed
Possibly Unhandled Rejection: Bucket validation failed,  Promise { <rejected> 'Bucket validation failed' }
>>>>>> Error: Unexpected token < in JSON at position 0
    at convert (/Users/jaruesink/Documents/Projects/Buckets/node_modules/feathers-rest/node_modules/feathers-errors/lib/index.js:365:79)
    at toError (/Users/jaruesink/Documents/Projects/Buckets/node_modules/feathers-rest/lib/client/base.js:24:37)
    at process._tickCallback (internal/process/next_tick.js:103:7)

我在 BucketService 类中的创建函数:

  create({
    amount,
    isFund = false,
    name,
    type,
    userID: owner
  }, params, next) {
    const new_bucket = new Bucket({ name, amount, type, isFund, owner });
    return new_bucket.save((error) => {
      console.log('error >>>>>', error.message);
      if (error) { return Promise.reject(error.message); }
      return Promise.resolve(new_bucket);
    });
  }

我的路由器文件:

const feathers = require('feathers');
const errorHandler = require('feathers-errors/handler');
const rest = require('feathers-rest');
const router = feathers();

const LoginService = require('../services/login_service');
const UserService = require('../services/user_service');
const BucketService = require('../services/bucket_service');

// Enable REST services
router.configure(rest());

router.use((req, res, next) => {
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
  next();
});

router.use('/login', new LoginService());
router.use('/user', new UserService());
router.use('/bucket', new BucketService());

// Set up error handling
router.use(errorHandler());

module.exports = router;

【问题讨论】:

    标签: json mongodb express promise feathersjs


    【解决方案1】:

    我想通了,关键是要正确的通过一个回调(next)函数作为第三个参数来处理错误。 FeathersJS 为您处理错误的 Promise Rejections。然后在我的测试中,我需要将 Feathers-Error 转换为 JSON,然后才能收到消息。

    我将测试更改为:

      it('can validate an incorrect bucket', (done) => {
        const invalid_bucket = {
          name: 'Invalid Bucket',
        };
        bucket_service.create(invalid_bucket, {}, (error) => {
          error = error.toJSON();
          assert(error.message.length > 0);
          done();
        });
      });
    

    和我的创建功能:

      create({
        amount,
        isFund = false,
        name,
        type,
        userID: owner
      }, params, next) {
        const new_bucket = new Bucket({ name, amount, type, isFund, owner });
        return new_bucket.save()
          .then(created_bucket => Promise.resolve(created_bucket))
          .catch(next);
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-06
      • 2016-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-25
      • 2011-12-20
      相关资源
      最近更新 更多