node.js - 无法使用 Sequelize 从 PG DB(在 Azure 中)检索数据

标签 node.js postgresql azure sequelize.js

我无法从 Azure 中托管的 PG DB 资源中检索数据。我正在使用 Sequelize 和 Node.js。

我可以使用终端和 GUI 连接到 Azure 中托管的数据库,我可以创建一个带有表和一些预填充字段的新数据库来进行概念验证。

但是,当我尝试在本地连接并获取数据时,我得到一个空数组响应 ([])。如果我在生产中遇到相同的端点,我会收到一个 502(一段时间后),并在客户端上显示以下消息:

服务器错误。
请求处理中出现意外错误。

下面的一些代码(它与我以相同方式配置的本地数据库一起使用):

这是我的数据库配置:

'use strict';

var Sequelize = require('sequelize');
var cfg = require('../config');

var sequelize = new Sequelize(cfg.db, cfg.username, cfg.password, {
  define: {
    timestamps: false
  },

  host: cfg.host,
  dialect: 'postgres',
  port: 5432
});

这是我的路由器代码:
'use strict';

const express = require('express');
const router = express.Router();

var User = require('../../models/users-model');

router.get('/', (req, res) => {
  User.findAll().then(user => {  
    res.json(user);
  });
});

module.exports = router;

在本地和 prod 中,我都希望通过一组 User 对象获得 JSON 响应。

在我的本地,正如所解释的,我得到一个空数组。
在生产中,正如所提到的,它似乎超时,最后我得到 502 错误响应。

任何帮助深表感谢!

更新!:我设法激活了 Azure 上的应用程序日志(我花了一点时间才找到它,因为我对这个平台还很陌生!)现在当我在 prod 中到达端点时得到了这个:
2019-08-12T12:52:06.355595892Z Unhandled rejection SequelizeConnectionRefusedError: connect ECONNREFUSED 127.0.0.1:5432
2019-08-12T12:52:06.355632393Z     at connection.connect.err (/usr/src/app/server/node_modules/sequelize/lib/dialects/postgres/connection-manager.js:170:24)
2019-08-12T12:52:06.355637793Z     at Connection.connectingErrorHandler (/usr/src/app/server/node_modules/pg/lib/client.js:191:14)
2019-08-12T12:52:06.355641493Z     at emitOne (events.js:116:13)
2019-08-12T12:52:06.355645293Z     at Connection.emit (events.js:211:7)
2019-08-12T12:52:06.355648693Z     at Socket.reportStreamError (/usr/src/app/server/node_modules/pg/lib/connection.js:72:10)
2019-08-12T12:52:06.355652093Z     at emitOne (events.js:116:13)
2019-08-12T12:52:06.355655393Z     at Socket.emit (events.js:211:7)
2019-08-12T12:52:06.355658393Z     at emitErrorNT (internal/streams/destroy.js:64:8)
2019-08-12T12:52:06.355661493Z     at _combinedTickCallback (internal/process/next_tick.js:138:11)
2019-08-12T12:52:06.355664693Z     at process._tickCallback (internal/process/next_tick.js:180:9)

最佳答案

几个小时后,我对数据进行了硬编码,而不是从我的配置文件中动态获取,可能我没有正确设置我的 Dockerfile 并且没有正确设置 ENV 变量。

现在我从本地攻击了 PROD 数据库,它似乎有效!如果有人能确认我的问题在于配置级别和 NODE_ENV 环境 Node 变量,我将不胜感激。

文件

# Node server serving Angular App
FROM node:8.11-alpine as node-server
WORKDIR /usr/src/app
COPY /server /usr/src/app/server
WORKDIR /usr/src/app/server
ENV NODE_ENV=prod
RUN npm install --production --silent
EXPOSE 80 443
CMD ["node", "index.js"]

然后在/config/index.js 我有:
var env = process.env.NODE_ENV || 'global'
  , cfg = require('./config.' + env);

module.exports = cfg;

所以我明白通过在 Docker 中将 NODE_ENV 设置为 prod,在 Azure 中启动 Node 应用程序时,它应该获取 config.prod.js 文件而不是 config.global.js 文件,对吗?

您可以看到我如何在问题的 db.js 文件上实现这一点。

关于node.js - 无法使用 Sequelize 从 PG DB(在 Azure 中)检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57453694/

相关文章:

node.js - Firestore 不支持带有自定义原型(prototype)的 JavaScript 对象?

java - 将 grunt 和 phantomjs 与 jetty 服务器一起使用

azure - 当应用服务位于应用服务环境中时,是否需要自定义域 SSL 绑定(bind)

Azure Active Directory token 在 JWT 中缺少应用程序角色

node.js - 如何在 Windows 上设置 NODE_ENV=生产?

javascript - 将查询结果从 MySQL 发送到 .ejs

postgresql - pgsql 存储过程 - 内部,c 或 sql 语言是最好的?

sql - 如何在 PostgreSQL 中按最大 ID 到最小 ID 排序

postgresql - pgadmin4 查询工具总是返回未连接

asp.net - 在 Azure 上创建 Web 应用程序时是否可以请求 Linux 服务器?