2017-04-22 47 views
0

我正在使用MongoDB的快速应用程序,并试图为我的所有服务使用FeathersJS。在这里我正在运行测试,尝试从服务器获取错误消息给客户端,但是我遇到了错误处理程序响应的问题。我的req头文件有正确的application/json,所以我认为Error Handler应该发回有效的json。FeathersJS错误处理程序意外标记<问题

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

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

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; 

回答

1

我想通了,关键是要正确地通过回调(下)函数作为处理错误的第三个参数。 FeathersJS在出现错误时为您处理承诺拒绝。然后在我的测试中,我需要将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); 
    }