错误:在sailsJs Middleware

时间:2015-07-09 14:12:22

标签: node.js express sails.js bluebird

我正面临一个问题,即在使用Bluebird承诺进行一些请求调用之后,我试图在我的中间件中设置cookie值,但是我收到的错误是"错误:在发送标题后不能设置标题",

我的代码是

    User.autoLogin(req, cookieToken).then(function(apiResponse)     {
                console.log("Autologin response");
                console.log(apiResponse.autologin);
                return apiResponse.autologin;
            }).then(function(apiResponse) {
                if (apiResponse.success === true) {
                    var returnUser = {};
                    returnUser = apiResponse.metadata.user;
                    returnUser.isUser = 1;
                    returnUser.cartItemsCount = apiResponse.metadata.no_of_items_cart || 0;
                    returnUser.checkoutStep = 2;
                    var upSesReq = {
                        "Al": "1",
                        "userId": returnUser.id_customer
                    };
                    var sessUpdate = User.updateSession(req, upSesReq);

                    sessUpdate.then(function(sesRes) {

                        console.log(sesRes);
                        if (sesRes.success === true) {
                            req.logIn(returnUser, function (err) {
                                if (err) {
                                    console.log(err);
                                    forceLogout = true;
                                    logError(err);
                                } else {
                                    forceLogout = false;
                                    /*
                                    UserEvents.on('loginSuccess', function(req, res){
                                        UserActivityListener.setAutoLoginCookie(req, res);
                                    });
                                    */
                                    console.log("Auto Login succcessful");
                                    sails.log.verbose("Autologin success full for User");
                                    req.session.totalJabongCredit = returnUser.total_store_credits || 0;
var expirationTime = new Date(Date.now() + (180 * 24 * 60 * 60 * 1000));
        res.cookie('xxxx', req.session.token, { expires: expirationTime, httpOnly: true });
                                    autologin = true;
                                    //UserActivityListener.setAutoLoginCookie(req, res);
                                    //UserEvents.loginSuccess(req, res);
                                }
                            });
                            console.log("After login session");
                            console.log(req.session);
                            console.log("After login session");
                        } else {
                            if (!isEmpty(sesRes.err)) {
                                logError(sesRes.err);
                                forceLogout = true;
                            } else {
                                logError(sesRes.message);
                                forceLogout = true;
                            }
                        }
                    }).catch(function(err) {
                        logError(err);
                        forceLogout = true;
                    });
                }
            }).error(function(err) {
                logError(err);
                forceLogout = true;
            }).catch(function(err) {
                logError(err)
                forceLogout = true;
            });

我在尝试设置Cookie时遇到错误。在我的autoLogin调用中,我调用了一些apis,并根据结果,这是我要继续的承诺对象。我没有在我的方法中使用res.end()像AutoLogin。请告诉我究竟是什么导致了这个问题?

1 个答案:

答案 0 :(得分:1)

看起来有些事情发生在:

var sessUpdate = User.updateSession(req, upSesReq);

并行运行
sessUpdate.then(function(sesRes) {
.....
}