fastify-mongodb:访问时“ mongo”未定义

时间:2019-11-12 17:05:34

标签: node.js mongodb fastify

我正在尝试使用Fastify和fastify-monogdb。 目前,我有以下...

在我的 /src/index.js

Token:  {'access_token': 'YWIzNGU3<secret>tNDQ5_PF84_7cc07dbd-<secret>-5877334424fd', 'expires_in': 1209599, 'refresh_token': 'MjU2ZDM4N2Et<secret>ZmItMTg5_PF84_7cc07dbd-<secret>877334424fd', 'refresh_token_expires_in': 7722014, 'expires_at': 1574863645}

在我的 /routes/index.js 中,我有一条路线...

const routes = require("./routes");
const fastify = require("fastify")({
  logger: true
});

routes.forEach((route, index) => {
  fastify.route(route);
});

fastify.register(require("fastify-mongodb"), {
  url: "mongodb://localhost:27017/parkedcars"
});

const startFastify = async () => {
  try {
    await fastify.listen(3333);
    fastify.log.info(`server listening on ${fastify.server.address().port}`);
  } catch (err) {
    fastify.log.error(err);
    process.exit(1);
  }
};

startFastify();

最后在我的 / controllers / carController ...

const carController = require("../controllers/carController");

  {
    method: "POST",
    url: "/api/create/parkedcar",
    handler: carController.createParkedCar
  }

当我尝试致电时:
const db = fastify.mongo.db

我收到一条错误消息,提示...
“无法读取未定义的属性'db'”

我在做什么错了?
此时 mongo 的定义如何?
“ fastify.register”不能让我访问吗?

1 个答案:

答案 0 :(得分:0)

您需要在每个应用程序中一次执行StreamBuilder ,因为它是工厂而不是单例,因此每次运行require时,您都需要创建一个全新的HTTP服务器!

魔术是正确使用require("fastify")()和/或使用.register代替处理程序中的箭头功能。

对于您的用例,您可以更改carController:

function

因为在fa​​stify中,所有函数处理程序都绑定到fastify服务器实例(例如 exports.createParkedCar = function handler (req, reply) { let car = { ...req.body }; const db = this.mongo.db *// will do insert here* db.insert(...) .then(() => reply.send(car)) .catch((err) => reply.send(boom.boomify(err))) } )。箭头功能无法绑定。

另一种选择是使用寄存器:

aFunction.bind(fastify)

有关更多信息,请查看markNeedsLayout