【发布时间】:2018-01-22 21:19:10
【问题描述】:
我使用 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));
});
}
};
【问题讨论】:
-
看起来不错,如果你想有更短的代码,你可能想试试node-postgres.com
-
在我的情况下,pool.connect 中的应用程序没有解析,因为它在 server.js 中定义
-
哦,等一下,你已经在使用 node-postgres 了。请问您为什么将应用程序放入池中。您已经让应用程序在 server.js 上侦听
-
好吧,我从 2 个不同的位置复制粘贴的代码,而且我对 nodejs 非常陌生。所以不知道怎么解决
-
pg-promise-demo 为您可以找到用于pg-promise 的数据库提供最佳代码结构。
标签: node.js node-postgres