我正在关注客户的JSONObject
。
{
"registerationId": 57502,
"firstName": "Taha",
"lastName": "Kirmani",
"dob": "10-08-1988",
"cnic": 4210137718361,
"gender": "Male"
}
这就是我现在解析它的方式。
app.post('/addUser', function (req, res) {
var registrationId= req.body.registerationId;
var firstName= req.body.firstName;
var lastName= req.body.lastName;
var dob= req.body.dob;
//var randomQuery = connection.query('INSERT INTO students `COLUMN NAME` VALUES `VALUES NAME` //);
//
})
通过上述方法,我可以将数据放入MySQL database
,但我正在寻找更有效的方法。
我想要做的是将jsonObject
传递给query
,然后将数据插入到数据库中,这样我就不会为每个人执行req.body.id
步骤路线。
我正在寻找类似的东西;
(insert into table (?) VALUES (?) , req.keys, req.values)
答案 0 :(得分:2)
有多种方法可以解决这个问题。
使用ORM库。对象关系映射器或ORM是一个可以帮助您从关系数据库(如MySQL)存储和检索对象的库。它可以帮助您为您的用例创建正确的SQL字符串(无论是创建,读取,更新还是删除)。 Node.js有很多可用的ORM。这里有几个:Bookshelf,Sequelize,Objection。 关于ORM的一些注释
将信息存储为JSON 。如果您确实希望按原样存储JSON数据,则可以选择直接编写JSON对象来执行数据库。关于这种方法的一些注意事项:
一般情况下,我建议您使用ORM而不是将信息存储为JSON。仅从经验来看,如果这样做就很难维护,并且在JSON中对索引的支持在MySQL中相对较新。如果您认为这确实更好,我建议使用非关系数据库而不是MySQL。
然而,对于大多数用例,选项1 - ORM - 可能是安全的选择。
答案 1 :(得分:1)
你不能简单地用SQL做到这一点。在SQL语法中,必须在解析查询时修复VALUES
子句中列的名称和值的数量。
当然,列必须存在于表定义中。如果您的JS对象具有与实际列不匹配的额外属性,则无论如何都无法工作。
要执行您想要的操作,您需要一些知道表中存在的列的JS类。它会选择JS对象中属性的子集,其名称与表的已知列匹配,我假设忽略其他属性。或者,如果存在非法属性,您是否希望它引发错误?
这说明了一个问题 - 您希望映射执行的操作不一定是其他任何人希望它执行的操作。或者甚至不是你想要它在你的其他应用程序中做什么。