0

我是 Node.js 的新手,甚至是一般的 JavaScript,我目前正在使用 Node/Express 设置一个 http-server,它应该查询一个 postgresql 数据库。我不确定我使用的路由和多个回调是否正确,希望有人能澄清一下。

现在,它看起来像这样:

在我的web.js

var routes = require('./routes');
app.get('/get/user/:userid', routes.user, routes.dbquery);

routes/index.js中

exports.user = function(request, response, next) {
    request.querystring = "select * from users where userid = " + request.param('userid');
    next();
};

exports.dbquery = function(request, response) {
    pg.connect(process.env.DATABASE_URL, function(err, client, done) {
        var query = client.query(request.querystring);  
        query.on('row', function(row, result) {
            result.addRow(row);
        });
        query.on('end', function(result) {
            response.send(JSON.stringify(result.rows));
        });
        done();
    });
};

它有效,但这是设置路由的正确方法吗?具体来说,是否可以只传递请求变量中的查询字符串等变量?或者还有其他一些首选的解决方案吗?

我想这样做的原因是因为我希望能够重用 dbquery 函数,因为我将有多个路由来查询数据库。

4

1 回答 1

1

是的,你可以附上任何你想request反对的东西(这是一种常见的做法)。但是,那里的数据应该仅与请求相关,而您的查询与请求并不真正相关(除了userid)。

那么如何在中间件中定义查询而不是定义外部函数:

var get_query = function(userid) {
    // NOTE: You should validate userid!!!
    return client.query("select * from users where userid = " + userid);
};

dbquery并在您的路线中调用它?并且只附加useridrequest.

于 2013-03-13T11:48:32.097 回答