Restful Api Express Postgres数据库

时间:2019-04-10 09:38:39

标签: node.js postgresql express

我正在开发带有node和exrpess的rest full api,我的数据库是postgresql,我需要使用postgres包pg-promise。

我知道我需要将我的应用程序与app.js文件中的数据库连接,但是我的问题是,我应该如何在端点中使用此连接。

我有路线,正在使用控制器。

例如

app.js

//in this file, suppously I have to to the connection 
const db = pgp('postgres://john:pass123@localhost:5432/products');

app.use('/products', productsRoute);

products.js(路线)

 router.get('/', ProductsController.get_all_products);

products.js(控制器)

    exports.get_all_products = (req, res, next ) => {
        // Here i want to use de database connection to do the query to find all
        //products in the database
    }

我如何访问连接以进行类似

的操作
db.any('SELECT * FROM products WHERE active = $1', [true])
    .then(function(data) {
        // success;
    })
    .catch(function(error) {
        // error;
    });

来自控制器。

更新

好,我现在使用的是node-prostgres,pg。我看到了更好,谢谢大家的建议。

我想创建一个time de db实例,并在任何地方调用它,具体在控制器中

我可以使用app.local保存客户端吗?,连接,进行查询然后关闭它。在任何地方做

3 个答案:

答案 0 :(得分:1)

我没有使用过view

如果有帮助,您可以使用PostgreSQL client for Node.js。您也可以将pg-promise与之配合使用。

您可以直接使用Express中间件代替路由器,如下所示。

async/await

对于模块化设计,请使用单独的文件(而不是//app.js: const express = require('express') const bodyParser = require('body-parser') const app = express() const port = 1234 const db = require('./dbconnector') //...omitted for brevity` // 'db' is exported from a file such as // dbconnector.js. app.get('/products', db.getProducts) //In dbconnector.js: const Pool = require('pg').Pool const pool = new Pool({ user: 'postgres', host: 'localhost', database: 'mydb', password: 'mypwd', port: 5432, }) const getProducts = (request, response) => { pool.query('SELECT * FROM products ORDER BY id ASC', (error, results) => { if (error) { throw error } response.status(200).json(results.rows) }) } // ...omitted for brevity module.exports = { getProducts } )作为数据库连接,这是最佳做法,app.js/index.js/server.js用于主require

这里是app.js模块上的help

答案 1 :(得分:0)

以下是使用方法的示例:

// mydb.js
async function someDbQuery() {
  let result;
  try {
    result = db.any('SELECT * FROM products WHERE active = $1', [true])
  } catch (e) {
    throw e
  }
  return result;
}
module.exports = someDbQuery;

// in your controller after importing
const { someDbQuery } = require('./mydb.js')
exports.get_all_products = async (req, res, next ) => {
  // Here i want to use de database connection to do the query to find all
  //products in the database
  try {
    const result = await someDbQuery();
    // use result here
  } catch (e) {
    // handle error
    console.error(e)
  }
}

旁注:

从文档pg-promise

  

建立在node-postgres之上

node-postgres现在也支持诺言。

答案 2 :(得分:0)

您无需执行任何操作,pg-promise会自动管理连接。它将为查询分配并在之后释放。参见examples