我无法从 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/