【问题标题】:chaining parameters to a JS library将参数链接到 JS 库
【发布时间】:2020-02-24 05:42:22
【问题描述】:

我试图像这样使用 bcrypt。

var token = bcrypt.hash(info, 10, function (err, hash) {
  if (err) return null;
  return hash;
});
//pass the info param to token whenever I call token
token("test");

如果可以,有人可以向我解释一下,如果可以,这是一个好习惯吗? 我基本上想这样做,因为出于某种原因,req.session.destroy 并没有真正从 Firefox 中删除会话,但它适用于 chrome。

【问题讨论】:

  • 不确定 bcrypt 包和散列函数,但 javascript 是绝对异步的,它会将内部函数发送到以太,并继续它的快乐方式。
  • 我今天遇到了类似的问题。在常规函数中,我需要调用一个 Promise 函数并返回它的值,例如 const x = Promise.resolve(1); const y= ()=>{//here I can't use await because then I'd have to make y into async and I can use .then() because I wouldn't be able to return the value of x} 关于如何继续的任何建议?

标签: javascript function return bcrypt


【解决方案1】:

您可以使用 async/await 函数调用。 hash 只接受字符串,所以最好在调用时使用toString() 方法

const token  = async (val) => await bcrypt.hash(val.toString(),10);

对于会话

app.use('/logout', (req, res) => {
  if (req.session) {
    req.session.destroy(() => {
      res.redirect('/')
    });
  } else {
    res.redirect('/')
  }
})

【讨论】:

  • var tokenGen = async function (info) { return await bcrypt.hash(info.toString(), 10); }这就是我做的。谢谢
  • 对于节点 ES6 支持像我的回答一样更好地使用箭头功能
  • for req.session.destroy 运行良好。最好检查回调req.session.destroy(()=>{ console.log(req.session) })
  • router.get("/logout", function (req, res, next) { req.session.user.token = undefined; req.session.destroy(function (err) { if (err) { req.session.user.token = null; res.redirect('/'); } else { res.redirect('/'); } }); }); 是我的实现方式,因为它不适用于 Firefox。
  • 很抱歉,但这与我的实现有何不同?
猜你喜欢
  • 1970-01-01
  • 2015-01-28
  • 1970-01-01
  • 2013-01-06
  • 1970-01-01
  • 2011-09-02
  • 1970-01-01
  • 1970-01-01
  • 2011-07-03
相关资源
最近更新 更多