База данных Restful Api express postgres - PullRequest
0 голосов
/ 10 апреля 2019

Я разрабатываю полноценный API для отдыха с узлом и exrpess, моя база данных - postgresql, мне нужно использовать пакет pg-promg для postgres.

Я знаю, что мне нужно подключить мое приложение к базе данных.в файле 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, стр.Я видел, что лучше, спасибо за советы людей.

Я хочу создать один раз экземпляр БД и вызывать его где угодно, в частности в контроллерах

Могу ли я использовать app.local длясохранить мой клиент ?, подключиться, сделать запрос и затем закрыть его.Делай это где угодно

Ответы [ 3 ]

1 голос
/ 10 апреля 2019

Я не использовал pg-promise.

Если это поможет, вы можете использовать PostgreSQL клиент для Node.js . Вы также можете использовать async/await с ним.

Вместо маршрутизатора вы можете сразу использовать промежуточное программное обеспечение Express следующим образом.

//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 on pg module.

0 голосов
/ 11 апреля 2019

Вам не нужно ничего делать, pg-обещание управляет соединениями автоматически.Он будет выделен для запроса и выпущен сразу после.См. примеры .

0 голосов
/ 10 апреля 2019

Вот пример того, как его использовать:

// 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

Построен поверх узла-postgres

node-postgres теперь также поддерживает обещание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...