node.js - passport.authenticate() 使用 Promise 而不是自定义回调
问题描述
passport.authenticate()
,如何定义Promise而不是使用自定义回球?
如何使用passport.authenticate()
在这里引用:http:
//www.passportjs.org/docs/authenticate/
在此页面中,有一个部分Custom Ballback:
如果内置选项不足以处理身份验证请求,则可以提供自定义回调以允许应用程序处理成功或失败。
app.get('/login', function(req, res, next) {
passport.authenticate('local', function(err, user, info) {
if (err) { return next(err); }
if (!user) { return res.redirect('/login'); }
req.logIn(user, function(err) {
if (err) { return next(err); }
return res.redirect('/users/' + user.username);
});
})(req, res, next);
});
自定义回调定义为:
function(err, user, info){...}
我想做的是用 Promise 替换这个自定义回调。
[Promise](resolve, reject)
.then(res => {
})
.catch(err => {
})
我怎样才能做到这一点?谢谢你。
解决方案
您可以使用es6-promisify包。它非常易于使用,这里有一个例子:
const {promisify} = require("es6-promisify");
// Convert the stat function
const fs = require("fs");
const stat = promisify(fs.stat);
// Now usable as a promise!
stat("example.txt").then(function (stats) {
console.log("Got stats", stats);
}).catch(function (err) {
console.error("Yikes!", err);
});
推荐阅读
- python - ModuleNotFoundError 在不同的操作系统上具有相同的本地包设置
- reactjs - IE11 错误:TypeError:非数组对象必须有 [Symbol.iterator]() 方法
- python - 如何将一堆同名文件复制到一个文件夹中?
- javascript - Discord.js 角色重叠
- go - 使用函数类型组
- spring-boot - ResourceServerTokenServicesConfiguration 中的 userInfoRestTemplateFactory 需要单个 bean,但找到了 4 个
- django - 检查用户是否具有列表权限并将结果转换为字典的有效方法
- java - 即使映射看起来正确,休眠映射异常
- docker - 在 docker compose 文件中设置 .env 变量时遇到问题
- django - 根据每个 DevicePart 模型计算 django 模型设备中的总数,包括数量