我正在学习Node并尝试使用Express创建服务器并将其连接到postgres db并在运行node server.js时继续获得以下内容:
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:password@localhost: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在运行。我是否需要在命令行中创建一个新的db然后运行$ psql来创建用户名/密码?不应该自动创建数据库吗?
答案 0 :(得分:2)
您可以使用
var sequelize = new Sequelize("postgres://username:password@localhost:5432/jobletics");
用于连接到postgresql数据库,但sequelize不会为您创建用户或数据库。你必须自己做。使用createuser
和createdb
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'\""
user:
{{1}}
答案 1 :(得分:0)
我没有看到自动创建数据库。当我使用sequelize.js时,我通常在一个vm中运行它,它有一个puppet清单断言数据库已经存在。
另外,当谈到连接数据库时,我通常会这样做,因为我觉得它更容易阅读:
var Sequelize = require("sequelize");
var sequelize = new Sequelize(
"dbName",
"username",
"password",
{
"dialect": "postgres",
"port": 5423
}
);
最后,确保你的package.json中存在postgres,如果不存在,则必须运行以下命令:
npm install --save pg pg-hstore
答案 2 :(得分:0)
尽管Sequelize没有创建数据库的方法,但是您可以使用create query方法执行自定义方法。
但要注意的是,
您需要“连接到数据库”才能执行任何命令
在这里您不能执行此操作,因为您首先要创建的是数据库创建命令。
有一种简单的方法可以解决此问题。 Postgress有两个无法删除的内置模板DB,分别称为template0和template1。 More on template databases here
因此,您要做的就是在连接字符串中连接到template1(不是template0)
const sequelize = new Sequelize('postgres://username:password@localhost:5432/template1')
并使用create query命令执行sequelize查询方法
const createQuery = "CREATE DATABASE YOUR_DB_NAME WITH OWNER = postgres ENCODING = 'UTF8' LC_COLLATE = 'English_United States.1252' LC_CTYPE = 'English_United States.1252' TABLESPACE = pg_default CONNECTION LIMIT = -1;"
sequelize.query(createQuery)
.then(() => console.log("DB created"))
.catch(err => console.log("error creating DB", err))