我有一个小的ember应用程序,它使用节点从mysql获取数据。目前,我使用以下方法获取客户数据:
function handleGet(connection,req,res) {
var limit = ('undefined' === typeof req.params.limit) ? 200: req.params.limit;
connection.query('SELECT * FROM customer LIMIT ' + limit, function handleSql(err, rows) {
if (err){ logAndRespond(err,res); return; }
if (rows.length === 0){ res.send(204); return; }
res.send({customers : rows});
connection.release();
});
}然而,我不想有一个功能,为客户,另一个为用户,等等。我怎么能抽象这一点?我可以把表名传递给函数,没问题。问题是,Ember期望响应上的表名。所以我不能改台词:
res.send({customers : rows});至
res.send({tablename : rows});因为它实际上发送的是'tablename‘这个词,而不是变量的内容,例如:{"tablename":{"id":1,“status”:“n”……}
谢谢!
发布于 2014-05-17 02:51:55
既然另一个答案已经教训了你,下面是解决办法:
function handleGet(connection, req, res) {
var limit = ('undefined' === typeof req.params.limit) ? 200: req.params.limit;
var table = req.params.table || return logAndRespond(new Error("Missing table param", res));
connection.query('SELECT * FROM ' + table + ' LIMIT ' + limit, function handleSql (err, rows) {
if (err){ logAndRespond(err,res); return; }
if (rows.length === 0){ res.send(204); return; }
var result = {};
result[table] = rows;
res.send(result);
connection.release();
});
}发布于 2014-05-16 18:13:01
您有一个错误,可能会阻止它发送表名变量值。您有"tablemame“而不是"tablename”。
此外,我强烈建议您从任何Javascript中删除实际的SQL语句!黑客可以修改您的代码以运行他们想要的任何SQL。
https://stackoverflow.com/questions/23701858
复制相似问题