Kyl*_*ent 4 node.js express axios
我一直在尝试使用Axios来检查用户是否已通过服务器端身份验证(Node + Express + Passport)。
如果用户通过了身份验证,则服务器将发回“已连接”字符串,否则,服务器将发回“未连接”字符串。
Router.get('/isAuth', function (req, res, next) {
if (req.isAuthenticated()) {
return res.status(200).send('Connected');
} else {
return res.status(200).send('Not connected');
}
});
Run Code Online (Sandbox Code Playgroud)
我编写了一个简单的函数来检查服务器的响应:
function isAuth() {
return axios.get('http://localhost:3000/endpoints/isAuth')
.then((response) => {
if (response.data === "Connected") {
return true;
} else {
return false;
}
})
.catch((error) => {
console.log(error)
})
}
Run Code Online (Sandbox Code Playgroud)
如果用户已连接,则该函数应返回true,反之亦然。
现在,当我尝试在控制台中记录函数的结果时,这就是我得到的:
Promise {[[PromiseStatus]]: "pending", [[PromiseValue]]: undefined}
__proto__ : Promise
[[PromiseStatus]] : "resolved"
[[PromiseValue]] : false
Run Code Online (Sandbox Code Playgroud)
如您所见,返回的值是一个Promise对象,而所需的输出最好是“ True”或“ False”。
isAuth会执行异步请求,这将需要一些时间。因此它不能直接返回true或false。而是返回一个获得该布尔值的Promise。要访问布尔值,您必须将isAuth()函数视为promise:
isAuth().then(isAuthenticated => console.log(isAuthenticated));
Run Code Online (Sandbox Code Playgroud)
更新:
此代码:
var test = isAuth();
Run Code Online (Sandbox Code Playgroud)
将同步地返回承诺,而不会等待响应结果
如果要访问诺言的响应,则需要使用:
test.then(value => ...);
Run Code Online (Sandbox Code Playgroud)
如果您确实要发出同步的HTTP请求(阻止您的应用程序,直到请求被解决),您可以签出https://github.com/ForbesLindesay/sync-request
但实际上,如果您不是仅出于测试目的,就不要使用它。
您可以考虑的另一件事是节点7.6附带的async / await的使用, 但是您首先应该完全了解promise的概念
| 归档时间: |
|
| 查看次数: |
14119 次 |
| 最近记录: |