2015-03-03 65 views
0

林學習節點,並試圖創建一個使用快速的服務器並將其連接到一個Postgres數據庫,並不斷收到下面當我運行節點server.js:得到錯誤試圖Node.js的創建的Postgres數據庫

events.js:72 
     throw er; // Unhandled 'error' event 
      ^
error: role "username" does not exist 
    at Connection.parseE (/Users/rs/Desktop/Jobletics/node_modules/pg/lib/connection.js:526:11) 
    at Connection.parseMessage (/Users/rs/Desktop/Jobletics/node_modules/pg/lib/connection.js:356:17) 
    at Socket.<anonymous> (/Users/rs/Desktop/Jobletics/node_modules/pg/lib/connection.js:105:22) 
    at Socket.emit (events.js:95:17) 
    at Socket.<anonymous> (_stream_readable.js:764:14) 
    at Socket.emit (events.js:92:17) 
    at emitReadable_ (_stream_readable.js:426:10) 
    at emitReadable (_stream_readable.js:422:5) 
    at readableAddChunk (_stream_readable.js:165:9) 
    at Socket.Readable.push (_stream_readable.js:127:10) 

我的server.js文件看起來像這樣:

// app dependencies 
var express = require("express"); 
var Sequelize = require("sequelize"); 
var bodyParser = require('body-parser'); 
var morgan = require('morgan'); 
var app = express(); 


//middleware 
app.use(bodyParser()); 
app.use(morgan('dev')); 

//sequalize initialization 
var sequelize = new Sequelize("postgres://username:[email protected]:5432/jobletics"); 
var employerRoute = require("./routes/employer")(sequelize); 

//sync the model with the database 
sequelize.sync().success(function (err) { 
    app.get("/employer", employerRoute.get); 
    app.post("/employer", employerRoute.create); 
    app.listen(5000); 
}); 

我有postgres運行。我是否需要在命令行中創建一個新的數據庫,然後運行$ psql來創建用戶名/密碼?不應該自動創建數據庫?

回答

0

我還沒有看到數據庫自動創建。當我使用sequelize.js時,我通常在一個具有puppet清單的虛擬機中運行它來聲明數據庫已經存在。

而且,當涉及到連接到數據庫,我通常會做它像這樣,因爲我認爲這是更容易閱讀:

var Sequelize = require("sequelize"); 

var sequelize = new Sequelize(
    "dbName", 
    "username", 
    "password", 
    { 
     "dialect": "postgres", 
     "port": 5423 
    } 
); 

最後,確保Postgres的在你的package.json現有,如果沒有,你將不得不運行以下命令: npm install --save pg pg-hstore

+0

能否請你解釋一下,你是怎麼做的:「當我使用sequelize.js,我通常內運行vm,它有一個木偶清單來聲明數據庫已經存在。「 – rahul2001 2015-03-03 18:02:54

2

您可以使用

var sequelize = new Sequelize("postgres://username:[email protected]:5432/jobletics"); 

連接到PostgreSQL數據B ase,但sequelize不會爲您創建用戶或數據庫。你必須自己做。使用createusercreatedb postgres實用程序創建它們,或使用-c標誌的psql命令。此外,還必須有權限做到這一點,所以在下面的例子中使用命令用戶postgres運行:

su postgres -c "psql -U postgres -c \"CREATE USER username WITH ENCRYPTED PASSWORD 'password'\"" 
su postgres -c "psql -U postgres -c \"CREATE DATABASE jobletics WITH OWNER=username ENCODING='UTF8'\"" 
+0

謝謝亞歷克斯。如何在代碼中使用createuser/createdb和postgres/sequelize?我不需要使用續集來使用'pg'包中的實用程序嗎?你是怎樣做的?對不起,即時通訊新的這個堆棧/ postgres。 而我假設一旦我使用createuser/createdb工具,我可以通過psql訪問數據庫,對嗎?謝謝您的幫助。 我真的希望有一個教程解釋與postgres MEAN堆棧 – rahul2001 2015-03-03 17:58:47

相關問題