Node.js 如何在feathersJS中从hook之前返回未经授权的响应
我的应用程序(模块)的某些部分对某些人来说是禁止的,所以我想在挂接之前检查一下,如果需要的话,发送未经授权的响应。 我在后端成功地抛出了错误,但在前端,我仍然得到了成功的响应,就好像没有错误一样 下面是我的代码的样子: 1.检查发送请求的用户是否禁止应用程序的功能:Node.js 如何在feathersJS中从hook之前返回未经授权的响应,node.js,express,feathersjs,Node.js,Express,Feathersjs,我的应用程序(模块)的某些部分对某些人来说是禁止的,所以我想在挂接之前检查一下,如果需要的话,发送未经授权的响应。 我在后端成功地抛出了错误,但在前端,我仍然得到了成功的响应,就好像没有错误一样 下面是我的代码的样子: 1.检查发送请求的用户是否禁止应用程序的功能: function isAppForbidden(hook) { let forbiddenApps = []; hook.app.services.settings.find(
function isAppForbidden(hook) {
let forbiddenApps = [];
hook.app.services.settings.find({
query: {
$limit: 1,
$sort: {
createdAt: -1
}
}
}).then(res => {
let array = hook.params.user.hiddenApps;
if(array.indexOf('qualitydocs') >= 0 || res.data[0].forbiddenApps.indexOf('qualitydocs') >= 0) {
hook.response = Promise.reject({error: '401 Unauthorized'});
//this part is important, the rest not so much
//what im expecting to do here is just to return unauthorized response
}
});
return hook;
}
但现在这只会在后端抛出错误,如:“错误:未经处理的拒绝:承诺”{ {错误:{code:'401',message:'Unauthorized'}}}}code=401,message=Unauthorized' 前端仍然得到成功响应(200个请求数据) 我只是在hooks之前调用这个函数:
before: {
all: [
authenticate('jwt'),
hook => includeBefore(hook),
hook => isAppForbidden(hook) //here, rest is not important
],
find: [],
get: [],
create: [(hook) => {
hook.data.authorId = hook.params.user.id;
}],
update: [],
patch: [],
remove: []
},
我期望得到的响应如下:找到了解决方案。。。关键是将函数的内容包装在promise中。。。现在看起来是这样的:
function isAppForbidden(hook) {
return new Promise((resolve, reject) => {
hook.app.services.settings.find({
query: {
$limit: 1,
$sort: {
createdAt: -1
}
}
}).then(res => {
if (hook.params.user.hiddenApps.indexOf('qualitydocs') >= 0 || res.data[0].forbiddenApps.indexOf('qualitydocs') >= 0) {
reject(new errors.NotAuthenticated());
} else {
resolve();
}
})
})
}
它是一种魅力