Javascript app.use in a promise(bookshelf.js和express basic auth)

Javascript app.use in a promise(bookshelf.js和express basic auth),javascript,node.js,express,promise,bookshelf.js,Javascript,Node.js,Express,Promise,Bookshelf.js,Api.fetchAll({columns:['username','password']}) .然后(职能部门(员工) { return employee.toJSON(); }) .然后(职能部门(员工){ 应用程序使用(basicAuth)({ 用户:{employee} })); });好的,下面是我如何解决它的 async function runServerAuth (){ let employee = await Api.fetchAll({columns: ['usern

Api.fetchAll({columns:['username','password']})
.然后(职能部门(员工)
{
return employee.toJSON();
})
.然后(职能部门(员工){
应用程序使用(basicAuth)({
用户:{employee}
}));

});好的,下面是我如何解决它的

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给我这个主意


虽然我相信这段代码仍然可以改进,但就目前而言,这是可行的。

好的,下面是我如何解决它的

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给我这个主意


虽然我相信这段代码仍然可以改进,但就目前而言,这是可行的。

您可以使用以下结构-

路线-

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});
   }


};

通过这种方式,您可以添加任意数量的中间件,甚至不添加任何中间件。

您可以使用以下结构-

路线-

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});
   }


};

通过这种方式,您可以添加任意数量的中间件,甚至不添加任何中间件。

您可以使用async/await吗?是的,这是我看到其他人所做的,但我已经尝试了几个小时,似乎无法让它工作。我是nodejs/js的新手。您可以随时将其余的服务器设置代码移到回调中
apicall.then(employee=>{/*吨的app.x()调用*/})
你能使用async/await吗?是的,这是我看到其他人做的,但我已经尝试了几个小时,似乎无法让它工作。我是nodejs/js的新手。您可以随时将其余的服务器设置代码移到回调中
apicall.then(employee=>{/*吨app.x()调用*/})