我一直忠實地遵循有關Heroku和Node.js入門的優秀示例。直到數據庫部分。運行Heroku Node.js時遇到的錯誤入門示例 - 數據庫部分
我:
- 創建的數據庫。
- 我可以通過Heroku Database Dashboard訪問數據庫。
- 我已經創建了一個表格並通過
heroku pg:psql
控制檯將數據插入到表格中。 - 我可以通過控制檯對錶執行sql查詢。
但是當我嘗試,並通過在index.js路由連接&查詢的數據,我遇到連接到數據庫的錯誤。
生成的連接字符串如下:heroku config
,其中包含所需的憑據,如預期的那樣。
=== aqueous-eyrie-10062 Config Vars
DATABASE_URL: postgres://uqeeuludvmhdzx:[email protected]azonaws.com:5432/dbpa7e9l3b2k8g
PAPERTRAIL_API_TOKEN: T8Y4ESxxxxxxxx0rexl
TIMES: 7
起始本地實例heroku local db2
(或瀏覽到localhost:5000/db2
)後,控制檯顯示以下輸出:(用戶的羅伯特'是當前窗口用戶順便說一句)
生成該錯誤由PG-查詢呼叫以及在其他路由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"
}
據筆者瞭解,該數據庫用戶應該從連接字符串從當前用戶獲得的,而不是。我該如何糾正這一點?