передача значения из промежуточного программного обеспечения в контроллер в restify с использованием req.data не работает? - PullRequest
0 голосов
/ 05 января 2020

демонстрационная структура проекта

  • промежуточное ПО
    • аутентификация. js
  • маршруты
    • пользователь. js
  • контроллеры
    • userController. js

auth. js

exports.authUser=(req,res,next)=>{
...
//got user value somehow and it's fine
req.user=user;
return next();
}

user. js (route)

server.get("/users",authUser,userController.userList);
}

userController. js (Controller)

exports.userList=(req,res,next)=>{
console.log(req.user);
...
}

вывод журнала равен undefined

Каков фактический способ передачи значения в restify?

  • пробовал также способ restify.plugins.pre.context.
  • попытался передать значение в следующей функции.
  • попытался установить функции [], как в

server.get("/users",[authUser,userController.userList]);

Ответы [ 2 ]

1 голос
/ 09 января 2020
user.js (route)
server.get("/users",authUser,function (req, res) {
    userController.userList(req, function (result) {
        res.send(result)
    })
})
userController.js (Controller)

exports.userList=(req,callback)=>{
   console.log(req.user);
   callback(null)
}
1 голос
/ 09 января 2020

Когда вы добавляете data к req.data, например, и если добавляемые вами данные извлекаются из базы данных или из другой службы, которая может занять время, , затем убедитесь, что добавили next() в состоянии, когда были получены данные или произошла ошибка.

? Для примера промежуточного программного обеспечения:

const myCustomMiddleware = (req, res, next) => {
     UserModel.find ('...')
     .then(data => {
       // set req.data
       req.data = data;
       // next for set req.data
       next();
     }).catch(ex => {
       // next for error
       next();
     });

     // dont add the next function outside the `then and catch`,
     // next(); well make req.data 'undefined'
   }

? Например, в песочнице с тайм-аутом: https://codesandbox.io/s/heuristic-glitter-3yq4z

Надеюсь, это поможет.

...