gpt4 book ai didi

node.js - 运行 Heroku Node.js 入门示例时遇到错误 - 数据库部分

转载 作者:太空宇宙 更新时间:2023-11-04 02:03:46 25 4
gpt4 key购买 nike

我一直忠实地遵循 Heroku 和 Node.js 入门的优秀示例。直到数据库部分。

我有:

  1. 已创建数据库。
  2. 我可以通过 Heroku Database Dashboard 访问数据库.
  3. 我创建了一个表,并通过 heroku pg:psql 控制台将数据插入到该表中。
  4. 我可以通过控制台对表执行 SQL 查询。

但是当我尝试通过index.js 中的路由连接和查询数据时,我在连接到数据库时遇到错误。

生成的连接字符串如下所示,来自 heroku config,其中包含预期所需的凭据。

=== aqueous-eyrie-10062 Config Vars
DATABASE_URL: postgres://uqeeuludvmhdzx:6181554101xxxxxxxxxxxxxxxxxxxxxxa@ec2-107-21-113-16.compute-1.amazonaws.com:5432/dbpa7e9l3b2k8g
PAPERTRAIL_API_TOKEN: T8Y4ESxxxxxxxx0rexl
TIMES: 7

启动本地实例 heroku local db2 (或浏览到 localhost:5000/db2)后,控制台显示以下输出:(用户“rober”是当前的 Windows 用户 b.t.w.)

该错误是由 pg-query 调用以及其他路由 (/db ) 中的 pg.connect 调用生成的

C:\Users\rober\node-js-getting-started>heroku local
[OKAY] Loaded ENV .env File as KEY=VALUE Format
14:23:52 web.1 | Node app is running on port 5000
14:23:55 web.1 | (node:13876) DeprecationWarning: PG.connect is deprecated - please see the upgrade guide at https://node-postgres.com/guides/upgrading
14:23:55 web.1 | result: undefined
14:23:55 web.1 | rows: undefined
14:23:55 web.1 | err: error: role "rober" does not exist
14:23:55 web.1 | err: {"name":"error","length":90,"severity":"FATAL","code":"28000","file":"miscinit.c","line":"494","routine":"InitializeSessionUserId"}

下面是index.js

var cool = require('cool-ascii-faces')
var express = require('express');
var app = express();
var pg = require('pg');
var pool = new pg.Pool();
var query2 = require('pg-query');

app.set('port', (process.env.PORT || 5000));

app.use(express.static(__dirname + '/public'));

// views is directory for all template files
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');

app.get('/db', function (request, response) {
// ERROR received from below line
pg.connect(process.env.DATABASE_URL, function(err, client, done) {
if (client) {
var date = new Date();
var query = client.query('SELECT * FROM test_table',function(err, result) {
if(!err) {
response.send(JSON.stringify(result.rows));
accounts = JSON.stringify(result.rows);
} else {
response.send('failed');
}
done(); // call done to close the conection
});
} else {
response.send('No Client Error - ' + JSON.stringify(err));
throw(err);
}
});
});

app.get('/db2', function(request, response) {
// ERROR received from below line
query2.connectionParameters = process.env.DATABASE_URL;

//accepts optional array of values as 2nd parameter for parameterized queries
query2('SELECT $1::text as name', ['rob'], function(err, rows, result) {
console.log('result: ' + result);
console.log('rows: ' + rows);
console.log('err: ' + err);
console.log('err: ' + JSON.stringify(err));
});
});

我的package.json如下:

{
"name": "node-js-getting-started",
"version": "0.2.6",
"description": "A sample Node.js app using Express 4",
"engines": {
"node": "6.10.2"
},
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"dependencies": {
"cool-ascii-faces": "1.3.4",
"ejs": "2.5.6",
"express": "4.15.2",
"pg": "6.4.0",
"pg-query": "0.11.0"
},
"repository": {
"type": "git",
"url": "https://github.com/heroku/node-js-getting-started"
},
"keywords": [
"node",
"heroku",
"express"
],
"license": "MIT"
}

根据我的理解,db用户应该从连接字符串中获取,而不是从当前用户获取。我该如何纠正这个问题?

最佳答案

好的 - 感谢团队成员,我已经成功解决了这个问题:

我的假设是 heroku config 设置在运行 heroku local 时可用 - 错误!

要在部署之前进行本地测试,我需要使用 SET 命令将 DATABASE_URL 设置到 Windows 环境变量中。

SET DATABASE_URL=postgres://uqexxxxxxhdzx:6181554xxxxxxxxxxxxxxxxxa@ec2-107-21-113-16.compute-1.amazonaws.com:5432/dbpa7e9l3b2k8g

然后我继续从上面的代码中删除所有附加的连接方法,直到我只剩下

var pg = require('pg');

app.get('/db', function (request, response) {
pg.defaults.ssl = true;
pg.connect(process.env.DATABASE_URL, function(err, client) {
if (err) throw err;
console.log('Connected to postgres! Getting schemas...');

client
.query('SELECT table_schema,table_name FROM information_schema.tables;')
.on('row', function(row) {
console.log(JSON.stringify(row));
});
});
});

效果非常好。

关于node.js - 运行 Heroku Node.js 入门示例时遇到错误 - 数据库部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45036016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com