我在处理器模块中得到一个关于未定义的连接的错误。
我尝试在fastify中使用postgres创建一个表。我有和handle routes文件夹,用于处理路由和发送API请求。当我点击http://localhost:3000/initDB路由时,错误显示
{
"statusCode": 500,
"error": "Internal Server Error",
"message": "Cannot read property 'connect' of undefined"
}
这是我的表模块,看起来像表模块没有得到fastify示例我怎么能解决这个问题。
const fastify = require("../server");
const Table = async (req, reply) => {
await fastify.pg.connect(onConnect);
function onConnect(err, client, release) {
if (err) return reply.send(err);
client.query(
'CREATE TABLE IF NOT EXISTS "users" ("id" SERIAL PRIMARY KEY,"name" varchar(30),"lastname" varchar(30));',
function onResult(err, result) {
release();
reply.send(err || result);
}
);
}
};
module.exports = {
Table,
};
路线文件,
我负责这里的路线,
//const fastify = require("fastify");
const { Table } = require("./Handler/CreateTable");
const { GetUsers, PostUsers } = require("./Handler/Handler");
const CreateTable = {
handler: Table,
};
const getUsers = {
handler: GetUsers,
};
const postUsers = {
handler: PostUsers,
};
async function routes(fastify, options) {
fastify.get("/initDB", Table);
fastify.get("/users", getUsers);
fastify.post("/users/create", postUsers);
}
module.exports = routes;
服务器. js文件,
const fastify = require("fastify")({ logger: true });
fastify.register(require("fastify-postgres"), {
connectionString: `postgres://${process.env.POSTGRES_USER}:${process.env.POSTGRES_PASSWORD}@${process.env.POSTGRES_SERVICE}:${process.env.POSTGRES_PORT}/${process.env.POSTGRES_DB}`,
});
module.exports = fastify;
fastify.register(require("./routes"));
// Run the server
const start = () => {
fastify.listen(3000, "0.0.0.0", (err, address) => {
if (err) {
fastify.log.error(err);
process.exit(1);
}
});
};
start();
这是一个错误,请告诉我如何解决这个错误。
要解决的pg连接错误
在此键入
2条答案
按热度按时间ego6inou1#
1.检查fastify是否有
pg
属性,方法是按住CTRL键并单击导入行。fastify类/模块应该打开。在那里可以检查类的属性和方法。1.您正在将
onConnect
变量作为参数传递给函数。未在任何位置定义此变量:nvbavucw2#
一般来说,像这样导出全局变量是一个不好的做法。应用程序将非常难以测试
因此,我建议阅读this article about it
关于您的问题,您需要将代码更改为:
请注意,当您使用命名函数(而不是匿名函数)时,
this
上下文是fastify示例。因为您所引用的
fastify
变量还没有加载装饰器,所以该文件中的fastify.pg
返回undefined
,所以会出现undefined。最后,您应该安装
@fastify/postgres
而不是fastify-postgress
,因为最后一个已经过时了。