app.use внутри обещания (bookshelf.js & express-basic-auth) - PullRequest
0 голосов
/ 28 февраля 2019

Api.fetchAll({columns: ['username','password']})
.then(function(employee)
{
	return employee.toJSON();
})
.then(function(employee){
	app.use(basicAuth({
			users: {employee}
		}));
});

Мне нужно, чтобы мое промежуточное программное обеспечение (app.use) запустилось до того, как мой узел запустится, чтобы он зарегистрировался.Это не так, поэтому, когда я запускаю свой узел, моя базовая аутентификация никогда не регистрируется.Я использую express-basic-auth для базовой аутентификации моего API и bookshelf.js для получения значений в базе данных.

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Вы можете использовать следующую структуру -

Маршруты -

router.post("/home/all", [Lib.verifyToken.loginInRequired] , Controller.userChatController.homeAll);

И Lib.verifyToken имеет следующий метод -

exports.loginInRequired = async function(request, response, next)
     {
    try{
    var data = request.body;
    data.userType = "User";

    if (!data.accessToken)
        return response.status(401).send({ success: -3, statusCode: 401, msg: response.trans("Your token has expired. Please login first")});

    var userDevice = await Service.userDeviceService.userMiddlewareGet(data);
    if(!userDevice)
        return response.status(401).send({ success: -3, statusCode: 401, msg: response.trans("Your token has expired. Please login first")});

    request.body.userDevice = userDevice;
    request.body.createdAt = moment.utc().format("YYYY-MM-DD HH:mm:ss");
    response.setLocale(userDevice.User.language);

    next();

   }
  catch(e)
   {
     return response.status(500).json({ success: 0, statusCode: 500, msg: e.message});
   }


};

Таким образом, вы можете добавить какстолько, сколько вам нужно промежуточного программного обеспечения или даже нет.

0 голосов
/ 28 февраля 2019

Хорошо, вот как я это решил.

async function runServerAuth (){
    let employee = await Api.fetchAll({columns: ['username','password']});
    employee = employee.toJSON();

    app.use(basicAuth({
            users: employee
    }));
    routes(app);
    app.listen(port);
    console.log('API server started on port: ' + port);
}

runServerAuth();

Я просто складываю все, что нужно перед тем, как запустить сервер вместе, внутри моей асинхронной функции (под Обещанием, которое требует времени для завершения).

Спасибо @TommyBs и @ChrisG за предоставленную мне идею.

Хотя я считаю, что этот код еще можно улучшить, но сейчас это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...