我正在开发带有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保存客户端吗?,连接,进行查询然后关闭它。在任何地方做
答案 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。