2017-04-22 3 views
0

MongoDBでExpress Appを開発中で、すべてのサービスでFeathersJSを利用しようとしています。ここでは、サーバーからクライアントへのエラーメッセージを取得しようとするテストを実行していますが、エラーハンドラからの応答に問題があります。私のreqヘッダーは正しいapplication/jsonのものを持っているので、私はエラーハンドラが有効なjsonを送り返すべきだと考えました。FeathersJSエラーハンドラ予期しないトークン<Issue

私は自分の関数で次のコールバックを使用していないことを知っていますが、私がしようとすると同じエラーが発生するので、エラーハンドラと関係があると思います。ここの方向は大いにありがとう!

最初のエラーログはサーバー上にありますが、これは正しいです。

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

を、私はそれを考え出した、キーは(次の)正確にコールバックを通過するようにしましたエラーを処理するための3番目のパラメータとして機能します。 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); 
    } 
関連する問題