NodeJs数据库查找

时间:2016-10-06 18:31:08

标签: node.js postgresql rest api express

我在使用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。

我认为这是因为回调函数与应用程序路径的范围不同,我如何才能像这样检查数据库?

我觉得有更好的方法可以做到这一点。

3 个答案:

答案 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发送一次快速请求。