如何连接 [=s10=] 到 PostgresQL 数据库?

How to connect knex.js to PostgresSQL database?

您好,我正在尝试使用 Knex.js 将数据库连接到 server.js 我尝试将用户添加为 postgresql,我还尝试将主机添加为本地主机,但没有成功我总是

下面是我列出所有数据库的时候!

无法加载资源:服务器响应状态为 400(错误请求)

下面是我尝试注册时出错的快照!

下面是我的 register.js 应该有助于注册数据库!

    const handleRegister = (req, res, db, bcrypt) => {
      const { email, name, password } = req.body;
      if (!email || !name || !password) {
        return res.status(400).json('incorrect form submission');
      }
      const hash = bcrypt.hashSync(password);
        db.transaction(trx => {
          trx.insert({
            hash: hash,
            email: email
          })
          .into('login')
          .returning('email')
          .then(loginEmail => {
            return trx('users')
              .returning('*')
              .insert({
                email: loginEmail[0],
                name: name,
                joined: new Date()
              })
              .then(user => {
                res.json(user[0]);
              })
          })
          .then(trx.commit)
          .catch(trx.rollback)
        })
        .catch(err => res.status(400).json('unable to register'))
    }

module.exports = {
  handleRegister: handleRegister
};

下面是我的 server.js 文件!

const express = require('express');
const bodyParser = require('body-parser');
const bcrypt = require('bcrypt-nodejs');
const cors = require('cors');
const knex = require('knex');

const register = require('./controllers/register');
const signin = require('./controllers/signin');
const profile = require('./controllers/profile');
const image = require('./controllers/image');

const db = knex({
  client: 'pg',
  connection: {
    host : 'localhost',
    user : 'postgres',
    database : 'smartbrain1'
  }
});

const app = express();

app.use(cors())
app.use(bodyParser.json());

app.get('/', (req, res)=> { res.send(db.users) })
app.post('/signin', signin.handleSignin(db, bcrypt))
app.post('/register', (req, res) => { register.handleRegister(req, res, db, bcrypt) })
app.get('/profile/:id', (req, res) => { profile.handleProfileGet(req, res, db)})
app.put('/image', (req, res) => { image.handleImage(req, res, db)})
app.post('/imageurl', (req, res) => { image.handleApiCall(req, res)})

app.listen(3000, ()=> {
  console.log('app is running on port 3000');
}) 

这是我在终端的 postgreSQL 中创建的数据库快照!

您应该首先尝试编写连接 pg 并运行查询的独立节点应用程序。然后,当您知道连接数据库按预期工作时,您可以开始与应用程序的其他部分集成。现在这个问题有太多不相关的信息。

首先尝试从 shell 连接您的 SQL 服务器,但不使用 UNIX 套接字,而是使用 TCP:

psql postgres://postgres@localhost/smartbrain1

如果失败,可能意味着您的数据库配置为不允许任何外部 TCP 连接。

要允许从本地主机访问 postgres,这应该在 pg_hba.conf 中通过设置

来完成
host    all             all             127.0.0.1/32            trust

您可能还需要为您的 postgres 用户添加密码并尝试启用密码连接:

psql postgres://postgres:<password>@localhost/smartbrain1

当从命令行连接成功时,您可以在 knex 配置中尝试这样的操作:

const db = knex({
  client: 'pg',
  connection: 'postgres://postgres:<password>@localhost/smartbrain1'
});

可以在此处 Knex:Error Pool2 - error: password authentication failed for user 以及其他数十个通用的 postgres 数据库连接问题问题中找到有关调试的更多信息。