【发布时间】:2018-12-20 04:04:41
【问题描述】:
我有一个 app.get 这样的:
app.get('/orders/:pizzeriaID/:status', async (req, res) => {
try {
const requestedOrderByPizzeriaID = req.params['pizzeriaID'];
const requestedOrderByStatus = req.params['status'];
console.log("STATUS" + requestedOrderByStatus);
const client = await pool.connect();
const result = await client.query('SELECT od.orderID, od.pizzaID, od.pizzaOrderQuantity, o.orderName, o.orderAddress, o.orderComment, o.orderPhone, o.orderEmail FROM ordersDetails od NATURAL JOIN pizzeria p NATURAL join orders o WHERE p.pizzeriaID=\'' + requestedOrderByPizzeriaID + '\' AND o.orderStatus=\'' + requestedOrderByStatus + '\'');
const results = (result) ? result.rows : null;
res.json({results});
client.release();
} catch (err) {
console.error(err);
res.send("Error " + err);
}});
在这样的数据库模型中: DBModel
这样显示 JSON:JSON1
我希望只有一个 orderid=1 的对象,其中有第二个 json(array?),其中包含 PizzaID 和 PizzaOrderQuantity 列表。
需要这样的方式:
results:{
orderid: 1,
orderDetails: [{
pizzaid: 1,
pizzaorderquantity: 2,
},
pizzaid: 2,
pizzaorderquantity: 4,
},
pizzaid: 3,
pizzaorderquantity: 1,
}],
ordername: 'Karol Piwnicki',
orderaddress: 'Rydla 26/30',
ordercomment: 'Szybko poprosze',
orderphone: '111-222-333',
orderemail: 'mail@mail.com' }
我已经使用它一段时间了,尝试了教程和堆栈中的几种方法,但没有成功。
任何帮助将不胜感激!
【问题讨论】:
-
在查询中直接使用
requestedOrderByPizzeriaID和requestedOrderByStatus而不进行适当的转义是一个非常糟糕的主意,因为它可以用于sql 注入。您应该改用准备好的语句或占位符。用户可以使用类似/orders/' OR TRUE OR '/:status作为 url。
标签: javascript node.js postgresql express