【问题标题】:Cannot read .sign of undefined error being thrown with Fastify无法读取 Fastify 抛出的未定义错误的 .sign
【发布时间】:2019-10-24 10:33:51
【问题描述】:

我正在通过以下方式创建我的服务器:

const createServer = options => {
  const { logSeverity } = options;

  const server = Fastify({
    ignoreTrailingSlash: true
  });


  server.listen(5000, err => {
    if (err) {
      server.log.error(err);
      console.log(err);
      process.exit(1);
    }
  });

  server.register(AutoLoad, {
    dir: path.join(__dirname, "api", "routes")
  });

  server.register(jwt, {
    secret: nconf.get("secrets.jwt")
  });
};

./some/child/path/signToken.js 我的一个模块中,我这样做了:

const nconf = require("nconf");
const jwt = require("fastify-jwt");

const signToken = payload => {
  fastify.jwt.sign(payload, nconf.get("secrets.jwt"), (err, token) => {
    if (err) throw err;

    const response = {
      userId: payload.user._id,
      username: payload.user.username,
      token
    };

    return response;
  });
};

module.exports = { signToken };

这会引发错误,Cannot read property 'sign' of undefined

根据docs

This will decorate your fastify instance with the standard jsonwebtoken methods

我在这里做错了什么?这可能是不可能的,因为我正在创建一个服务器,而服务器是我的 fastify 实例?然后我是否必须以某种方式导入server

【问题讨论】:

  • 问这个很傻,但你有没有记住 const fastify = require('fastify')
  • 我以前有,摆脱它,因为它仍然抛出 undefined 两种方式,一点也不傻
  • 我认为这是 npm [npmjs.com/package/fastify-jwt] 中的一个很好的例子。可能是模块的使用存在问题
  • 如何加载signToken.js?目前fastify.jwt.sign 变量不存在

标签: node.js jwt fastify


【解决方案1】:

你正在启动你的服务器

server.listen(5000...

在注册您的插件之前。

根据the fastify docs,正确的顺序是:

  1. 插件(来自 fastify 生态系统)
  2. 您的插件(您的自定义插件)
  3. 装饰器
  4. 钩子和中间件
  5. 您的服务

这应该在调用 fastify.listen() 之前发生。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-16
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    • 2018-12-12
    • 2019-10-14
    • 2016-10-25
    • 1970-01-01
    相关资源
    最近更新 更多