我正在尝试使用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”不能让我访问吗?
答案 0 :(得分:0)
您需要在每个应用程序中一次执行StreamBuilder
仅,因为它是工厂而不是单例,因此每次运行require时,您都需要创建一个全新的HTTP服务器!
魔术是正确使用require("fastify")()
和/或使用.register
代替处理程序中的箭头功能。
对于您的用例,您可以更改carController:
function
因为在fastify中,所有函数处理程序都绑定到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