如何将Node.js连接到现有的Postgres?错误:未处理的承诺被拒绝

汤姆·炸弹

我有一个使用Rails的现有postgresql数据库,现在我正在制作一个使用相同数据库的Node.js应用程序。我的数据库中已经有用户,现在我想列出所有用户。

我成功创建了一个快速应用程序,然后执行以下操作:

✗ npm install --save sequelize pg pg-hstore
✗ sequelize init

index.js

const express = require('express');
const logger = require('morgan');
const bodyParser = require('body-parser');
const pg = require('pg');
var conString = 'postgres://localhost:5432/db_name';
var client = new pg.Client(conString);
const app = express();

client.connect(err => {
  if (err) {
    console.error('connection error', err.stack);
  } else {
    console.log('connected');
  }
});

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

app.get('/', (req, res) => {
    res.send(models.User.findAll);
});

const PORT = process.env.PORT || 5000;
app.listen(PORT);

在我的config.json我有:

"development": {
"username": "my_username",
"password": null,
"database": "database_name",
"host": "127.0.0.1",
"dialect": "postgres"
}

我收到此错误: UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch()

我可能错过了一大步,但我不知道这是什么,我之前从未做过。

转盘

以下是一些使用async / await的示例查询(我相信,这需要Node 8+,因此请确保您的版本支持此功能):

var express = require('express');
var pg = require('pg');

var router = express.Router();

let conString = 'postgres://localhost:5432/db_name';

var postgrespool = new pg.Pool({
  connectionString: conString
});

router.get('/checkdbconnection', function(req, res, next) {
  (async () => {

    // Here is the query!
    // alter it to query a table in your db
    // this example just confirms a connection
    var { rows } = await postgrespool.query(`
      SELECT 
        'Hello from Postgres' AS pg_val;`);

    if (rows.length) {
      return res.send(rows);
    } else {
      res.status(404);
      return res.send('No response from database.');
    }
  })().catch(e =>
    setImmediate(() => {
      res.status(500);
      console.log(e);
      return res.send('Error: ' + e.message);
    })
  );
});

router.get('/checkdbconnection/:name', function(req, res, next) {
  let param_name = req.params.name;

  (async () => {

    // this example demonstrates how to pass parameters to your query with $1, $2, etc.
    // usually, the cast of "::text" won't be necessary after the "$1"
    var { rows } = await postgrespool.query(`
      SELECT 
        'Hello from Postgres' AS pg_val,
        $1::text AS parameter;`, [param_name]);

    if (rows.length) {
      return res.send(rows);
    } else {
      res.status(404);
      return res.send('No response from database.');
    }
  })().catch(e =>
    setImmediate(() => {
      res.status(500);
      console.log(e);
      return res.send('Error: ' + e.message);
    })
  );
});

module.exports = router;

如果您访问http:// localhost:5000 / checkdbconnection,则会收到以下响应:

[
  {
    "pg_val": "Hello from Postgres"
  }
]

如果访问http:// localhost:5000 / checkdbconnection / Al-josh,则会得到以下信息:

[
  {
    "pg_val": "Hello from Postgres",
    "parameter": "Al-josh"
  }
]

希望我在代码中的注释可以清楚说明查询的工作方式,因此您可以根据自己的目的进行更改。如果没有,请提供有关您的表的更多详细信息,我可以修改此答案。

还要注意,我在这里使用pg.Pool连接到Postgres。这完全是您的问题的第二要旨,但是文档值得一读。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Node.js未处理的承诺拒绝

我如何将 Luis 连接到 Node.js

未在Node.js中定义未处理的承诺拒绝错误值

Node.js未处理的拒绝错误

如何将现有的Android Studio项目连接到现有的Github存储库

UnhandledPromiseRejectionWarning:未处理的承诺拒绝 - Node.js

如何将新向量连接到现有的 Bert 向量中?

如何将AWS Athena连接到现有的Hive Metastore

如何将现有的Stripe帐户连接到我的平台帐户?

如何将现有的 SQLite 数据库连接到 ExpandableListView?

如何将项目重新连接到现有的GitHub存储库

如何将现有的液滴连接到Laravel Forge

如何将Docker MySQL映像连接到现有的Rails应用程序?

如何将 Xcode 项目连接到现有的 MsSql 服务器

如何在Node.js ExpressJS中的异步对象方法中处理未处理的承诺拒绝?

如何异步处理未处理的承诺拒绝?

将 Docker Postgres 容器连接到现有的空数据库

如何将Ejabberd或MongooseIM与Node.js(或Django)连接

如何将 vue.js 客户端添加到现有的 node.js api?

如何解决“未处理的承诺拒绝:错误:无法解析来自http:// localhost:3000 /的裸指定符“ app.js”

如何将ReactJS添加到现有的node.js后端应用程序

如何将Angle 4添加到现有的node.js应用程序

缓存承诺导致Node.js中未处理的承诺被拒绝

如何解决未处理的承诺拒绝?

UnhandledPromiseRejectionWarning:Node.JS中未处理的承诺拒绝(拒绝ID:1)

如何将Prisma / GraphQL连接到现有的MySQL数据库(特别是WordPress)?

如何将现有的 nodejs 服务器应用程序连接到 Azure SQL 数据库

如何将 Xamarin Android 应用程序连接到现有的 Sqlite 数据库?

如何将本地 node.js 应用程序连接到 Heroku Postgres 数据库?