[英]using postgres with nodejs for connection pool
我使用nodejs作為我的REST api主機。 整體功能非常基礎。 也就是說,進行REST調用,該調用應該執行postgres db查詢並返回數據。 我遇到的問題是整個代碼組織。
我有server.js,它有基本的初始化。 現在,我應該在哪里放置postgres連接並在需要時調用它來查詢db。 目前的結構如下。 所以我想我應該將postgres連接代碼移動到server.js? 什么應該是正確的結構
server.js
"use strict";
var express = require('express'),
app = express(),
port = process.env.PORT || 4001,
bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(function (req, res, next) {
// Website you wish to allow to connect
res.setHeader('Access-Control-Allow-Origin', '*')
// Request methods you wish to allow
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
// Request headers you wish to allow
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
// Set to true if you need the website to include cookies in the requests sent
// to the API (e.g. in case you use sessions)
res.setHeader('Access-Control-Allow-Credentials', true);
// Pass to next layer of middleware
next();
});
var routes = require('./api/routes/pushRoutes');
routes(app);
app.listen(port);
console.log('push notification server started on: ' + port);
pushController.js
'use strict';
exports.send_notification = function(req, res) {
console.log("start of send_notification ");
if (req.method == 'POST') {
var jsonString = '';
req.on('data', function (data) {
jsonString += data;
});
req.on('end', function () {
console.log(JSON.parse(jsonString));
var json = JSON.parse(jsonString);
var timeNow = json.message;
//get device token from db
var deviceToken = '';
var pg = require('pg')
var format = require('pg-format')
var PGUSER = 'deploy'
var PGDATABASE = 'oscpushserver'
var config = {
user: PGUSER, // name of the user account
database: PGDATABASE, // name of the database
max: 10, // max number of clients in the pool
idleTimeoutMillis: 30000
}
var pool = new pg.Pool(config)
var myClient
pool.connect(function (err, client, done) {
if (err) console.log(err)
app.listen(3000, function () {
console.log('listening on 3000')
})
myClient = client
var ageQuery = format('SELECT * from push_table WHERE seq_id = 1')
myClient.query(ageQuery, function (err, result) {
if (err) {
console.log(err)
}
console.log("row data:" + result.rows[0])
console.log("device id from db:" + result.rows[0].device_id)
deviceToken =result.rows[0].device_id;
})
});
res.json(JSON.parse(jsonString));
});
}
};
我假設你想制作一個只從db獲取數據的REST api。
server.js
大多數部分看起來都很好,除了你沒有正確使用路線。 要使用您定義的路線,請使用app.use:
app.use('/', routes);
database.js我會創建另一個文件,您可以將數據庫憑據放在一個位置並創建一個新池。
var pg = require('pg')
var PGUSER = 'deploy'
var PGDATABASE = 'oscpushserver'
var config = {
user: PGUSER, // name of the user account
database: PGDATABASE, // name of the database
max: 10, // max number of clients in the pool
idleTimeoutMillis: 30000
}
var pool = new pg.Pool(config);
module.exports = pool;
pushController
我假設你想在server.js中要求這個文件。 因此,請確保路徑指向'... / pushController'而不是'./api/routes/pushRoutes'。
const express = require('express');
const router = express.Router();
const format = require('pg-format');
const pool = require('../path/to/database.js');
router.get(function(req, res, next) {
pool.connect(function (err, client, done) {
if (err) throw new Error(err);
var ageQuery = format('SELECT * from push_table WHERE seq_id = 1')
client.query(ageQuery, function (err, result) {
if (err) throw new Error(err);
res.json(result.rows[0]);
})
});
});
module.exports = router;
所以現在,對API服務器的GET請求應該從postgres數據庫返回一個json對象。
有很多關於如何使用node和postgres制作REST API的在線示例。 其中之一是: https : //github.com/mjhea0/node-postgres-todo 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.