Обработчик ошибок FeathersJS Неожиданный токен <Проблема
Я работаю над Express App с MongoDB и пытаюсь использовать FeathersJS для всех моих услуг. Здесь я запускаю тестовую попытку получить сообщение об ошибке от сервера к клиенту, но у меня есть проблема с ответом от обработчика ошибок. Мои заголовки запроса имеют правильный 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;
1 ответ
Я понял, что ключ должен был правильно пройти через функцию обратного вызова (next) в качестве третьего параметра для обработки ошибок. 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);
}