Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何在feathersJS中从hook之前返回未经授权的响应_Node.js_Express_Feathersjs - Fatal编程技术网

Node.js 如何在feathersJS中从hook之前返回未经授权的响应

Node.js 如何在feathersJS中从hook之前返回未经授权的响应,node.js,express,feathersjs,Node.js,Express,Feathersjs,我的应用程序(模块)的某些部分对某些人来说是禁止的,所以我想在挂接之前检查一下,如果需要的话,发送未经授权的响应。 我在后端成功地抛出了错误,但在前端,我仍然得到了成功的响应,就好像没有错误一样 下面是我的代码的样子: 1.检查发送请求的用户是否禁止应用程序的功能: function isAppForbidden(hook) { let forbiddenApps = []; hook.app.services.settings.find(

我的应用程序(模块)的某些部分对某些人来说是禁止的,所以我想在挂接之前检查一下,如果需要的话,发送未经授权的响应。 我在后端成功地抛出了错误,但在前端,我仍然得到了成功的响应,就好像没有错误一样

下面是我的代码的样子:

1.检查发送请求的用户是否禁止应用程序的功能:

        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();
      }
    })
  })
}
它是一种魅力