0

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

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.

根据文档

This will decorate your fastify instance with the standard jsonwebtoken methods

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

4

1 回答 1

0

您正在启动服务器

server.listen(5000...

在注册插件之前。

根据fastify 文档 ,正确的顺序是:

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

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

于 2020-06-23T18:06:36.160 回答