使用多个回调在Express / Node.js中进行路由

时间:2013-03-13 10:27:18

标签: node.js routing express middleware

我是Node.js的新手,甚至是一般的JavaScript,我目前正在使用Node / Express建立一个应该查询postgresql数据库的http服务器。我不确定我是否正在使用路由和多个回调正确,并希望有人可以澄清这一点。

现在,它看起来像这样:

在我的 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函数,因为我将有多条路径来查询数据库。

1 个答案:

答案 0 :(得分:1)

是的,您可以将任何想要的内容附加到request对象(这是一种常见做法)。但是,数据应仅与请求相关,而您的查询与请求实际上并不相关(userid除外)。

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

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

并在dbquery路线中拨打电话?并且仅将userid附加到request