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