【发布时间】:2016-10-22 20:02:33
【问题描述】:
您好,我有一个问题,我无法用 express 的 res.json 真正解释。
这是我的 /login 路线:
router.post('/login', function (req, res) {
if (req.body.user) {
var newUser = (typeof req.body.user === 'string') ? JSON.parse(req.body.user) : req.body.user;
User.findOne({ email: newUser.email })
.exec(function (err, user) {
if (err) {
return res.json({ error: true, data: err });
} else {
if (user !== undefined && user !== null) {
// Check password and generate a token if it exist
encrypt.checkHash(newUser.pwd, user.pwd, function (err, isCorrect) {
if (err) {
return res.json({ error: true, data: err });
} else {
if (isCorrect != false) {
// Generate token and send it
Token.generateToken({
_id: user._id, email: user.email,
iat: moment().valueOf(),
exp: moment().add(30, 'minutes').valueOf(),
},
conf.secret,
{},
function (err, token) {
if (err) {
return res.json({ error: true, authenticate: false, data: err });
} else {
console.log('Logged');
return res.json({
error: false,
token: token,
authenticate: true,
msg: 'user_connected',
});
}
});
} else {
console.log('Not logged');
return res.json({ error: true, authenticate: false, msg: 'user_undefined' });
}
}
});
} else {
return res.json({ error: true, authenticate: false, msg: 'user_undefined' });
}
}
});
} else {
return res.json({ error: true, authenticate: false, msg: 'user_empty' });
}
});
这里是我向该路线提出请求的功能:
userRequest.auth = function (user) {
console.log('AUTH userRequest ', user);
$http({
method: 'POST',
url: url + '/auth/login',
dataType: 'application/json',
data: { user: user },
}).then(function successCallback(response) {
$log.warn('user request', response);
deferred.resolve(response);
}, function errorCallback(err) {
deferred.reject(err);
});
return deferred.promise;
};
这里是我的 onClick 函数,它启动了这个过程
var promise = userRequest.auth($scope.user);
promise.then(function (response) {
var data = response.data;
$log.info('Login RESPONSE ', response);
if (data.error == false && data.authenticate == true) {
$log.info('You are logged');
$scope.notification = setAlertBoxOptions($scope.notification, true, 'alert-success', 'Vous êtes maintenant connecté');
} else {
$log.info('Wrong informations');
$scope.notification = setAlertBoxOptions($scope.notification, true, 'alert-danger', 'Utilisateur inconnue');
}
}, function (reason) {
$log.error(reason);
});
我的函数的 encrypt.checkHash 回调起作用,并且值 isCorrect 是检查我的密码哈希时的好方法。如果密码正确,则记录“已记录”,如果不正确,则记录“未记录”。
我第一次在这条路线上发出请求时,它通过 res.json 向我发回响应,我得到了预期的数据。
但在第一次请求之后,我收到的数据始终是我在第一次查询时收到的数据。
例如:我第一次发送正确的身份信息并返回给我
{error: false, token: token, authenticate: true, msg: 'user_connected'}
但在那之后,每次我尝试对该路线进行另一个查询时,如果我的标识信息为假,我都会不断收到此 JSON 对象事件。
我不是 Nodejs 方面的专家,我试图替换我所有的
res.json({...})
由
return res.json({...})
停止执行但结果还是一样。
你能和我分享你的智慧并帮我解决这个案子吗?
【问题讨论】:
-
执行此操作时服务器发送的 HTTP 状态代码是什么? 200还是别的什么?
-
HTTP 状态码是 200,我刚刚发现为什么数据没有更新,但不知道为什么会有这种行为。它与方法的执行顺序有关。第一次执行时,我的 userRequest.auth 函数首先执行,然后我得到路由代码。但其他时候,路由代码会先执行,然后再执行 userRequest.auth 代码。这是为什么 ?我的 promise 实现有错吗?
标签: angularjs json node.js express