首页 > 解决方案 > 运行良好几个小时后,TypeOrm 查询无法从 Nodejs 应用程序中的 postgres 服务器获取数据

问题描述

我的 nodejs API 可以正常运行几个小时,然后 API 不会将数据返回给客户端。调试后,我发现 TypeOrm 无法从远程 postgres 服务器查询数据,即使 postgres 服务器已连接。Nodejs 应用程序中的查询没有错误。我可以从 pgAdmin 的远程 postgres 数据库中查询数据。app.ts 代码

 const conn = await createConnection({
    host: process.env.TYPEORM_HOST,
    password: process.env.TYPEORM_PASSWORD,
    type: 'postgres',
    username: process.env.TYPEORM_USERNAME,
    database: process.env.TYPEORM_DATABASE,
    port: Number(TYPEORM_PORT),
    logging: TYPEORM_LOGGING === 'true' ? true : false,
    synchronize: TYPEORM_SYNCHRONIZE === 'true' ? true : false,
    entities: [UserEntity],
  });
  console.log(conn.options.database);

  ////####    Middleware Section    ####/////
  const apolloServer = new ApolloServer({
    schema: await CreateSchema(),
    subscriptions: {
      path: `${ENDPOINT_PATH}`,
    },
    uploads: false,
    //tracing: true,
    context: ({ req, res }: any) => ({
      req,
      res,
      ...dataLoaderInject,
    }),
  });
  const app = Express();
  const whitelist: any = process.env.ENDPOINT_CORS?.split(',').map((x) =>
    x.trim()
  );
  var corsOptions = {
    origin: function (origin: any, callback: any) {
      if (whitelist.indexOf(origin) !== -1) {
        callback(null, true);
      } else {
        callback(null, false);
      }
    },
    credentials: true,
  };
  app.use(cors(corsOptions));
  app.use(graphqlUploadExpress({ maxFileSize: 500000000, maxFiles: 50 }));
  app.use(cookieParser());
  apolloServer.applyMiddleware({ app, cors: false, path: ENDPOINT_PATH });
  const httpServer = http.createServer(app);
  apolloServer.installSubscriptionHandlers(httpServer);
  httpServer.listen(ENDPOINT_PORT, () => {
    //Register jobScheduler here
    JobSchedulerService.sendReminder();
    console.log(
      `Server started at  ${ENDPOINT}:${ENDPOINT_PORT}${ENDPOINT_PATH}`
    );
  });

TypeOrm 无法从远程 postgres 服务器返回结果的 POST 请求。

 app.post('/user', async (req, res) => {
    let token = req.cookies.UserCookie;
    if (!token) {
      console.log('token is not valid ' + token);
      return res.send({ ok: false, accessToken: '' });
    }
  let payload: any;
    try {
      payload = verify(token, process.env.REFRESH_TOKEN_SECRET!);
    } catch (err) {
      console.log(err);
      return res.send({ ok: false, accessToken: '' });
    }
    const user = await 
      getRepository(UserEntity)
      .createQueryBuilder()
      .where('"ID"=:ID', { ID: payload.userID })
      .getOne()  // request die here , no error , does not respond anything
    .catch( err => {
        console.log(err, "User Query error")
      })  
    if (!user) {
      console.log('User not found');
      return res.send({ ok: false, accessToken: '' });
    }

堆栈版本

Postgres 12 
Nodejs : v12.16.3
npm : 6.14.4
"pg": "^8.3.3"
"typeorm": "^0.2.26",
"express": "^4.17.1",
"node-cron": "^2.0.3",

您的回复将不胜感激谢谢。

标签: node.jspostgresqlexpresstypeormgraphql-js

解决方案


推荐阅读