我在使用express和postgresql的节点中使用网络网站 - 使用pg npm模块 - 作为我的数据库。 我现在正在尝试设置这样的用户页面:
...
app.get('/u/:u/', function (req, res) {
pool.connect(function(err, client, done) {
...
client.query('SELECT * FROM users WHERE id =($1)', [req.params.u], function(err, result) {
... done(); ...
});
});
});
...
req.params.u
在数据库查询中返回undefined。
我认为这是因为回调函数与应用程序路径的范围不同,我如何才能像这样检查数据库?
我觉得有更好的方法可以做到这一点。
答案 0 :(得分:0)
因此,如果问题是params未定义,那么解决方案应该来自类似于:
...
app.get('/u/:u/', function (req, res) {
var tempReq = req
pool.connect(function(err, client, done) {
...
client.query('SELECT * FROM users WHERE id =($1)',[tempReq.params.u], function(err, result) {
... done(); ...
});
});
});
...
答案 1 :(得分:0)
请务必将
body-parser
代码放在routes
文件中app.js
之上,以获得req.body or req.params or req.query
值
var app=express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
extended: false
}));
您的req
对象在您的整个路径范围内可用,然后您可以在此块中的任何位置使用它,无需存储在本地变量中
app.get('/u/:u/', function (req, res) {
pool.connect(function(err, client, done) {
...
client.query('SELECT * FROM users WHERE id =($1)',[req.params.u], function(err, result) {
... done(); ...
});
});
});
答案 2 :(得分:0)
您也可以一次与多个数据库进行通信
您需要首先使用ssl。
var fs = require('fs');
var SSLkey = fs.readFileSync('/local/pem/location/key.pem');
var SSLcert = fs.readFileSync('/local/pem/location/cert.pem');
现在数据库代码
const mysql = require('mysql');
const forumdb_db = mysql.createConnection({
host: 'localhost',
user: 'dbuser',
password: 'dbpassword',
database: 'dbname',
key: SSLkey,
cert: SSLcert,
connectionLimit: 15,
queueLimit: 30,
acquireTimeout: 1000
});
const inventory_db = mysql.createConnection({
host: 'localhost',
user: 'dbuser',
password: 'dbpassword',
database: 'dbname',
key: SSLkey,
cert: SSLcert,
connectionLimit: 15,
queueLimit: 30,
acquireTimeout: 1000
});
连接到数据库
inventory_db.connect((err0) => {
inventory_db.query("SELECT `bubblebum` FROM `user_inventory` WHERE `index`='1' LIMIT 1;", function(err0, result0, field0) {
console.log(result0[0].bubblebum);
});
});
forum_db.connect((err0) => {
forum_db.query("SELECT `stars` FROM `user_inventory` WHERE `stars`>'100' LIMIT 1;", function(err1, result1, field1) {
console.log(result1[0].stars);
});
});
有一个问题,一段时间不活动后您将断开连接,因此您应该设置一个间隔,每隔十秒向sql server发送一次快速请求。