我正在尝试重用路由来更新mysql表中的列。我能够将正确的对象从客户端传递到服务器端,并更新表,问题是所有字段都在更新,而不是对象中的特定字段。如果没有字段,则将这些字段更新为“未定义”。
在客户端,这是通过$ .ajax PUT传递到服务器端的三个对象。
routePUT.js
// Object 1 //
object = {
element1,
elementAttr1
}
// Object 2 //
object = {
element2,
elementAttr2
}
// Object 3 //
object = {
element3,
elementAttr3
}
这是我控制器内的路由代码。我正在为MySQL使用orm结构。用于更新表的代码位于此代码下方,但我觉得问题出在controller.js
controller.js
app.put("/api/thisTable/:id", function (req, res) {
table = "thisTable";
condition = "id = " + req.params.id;
objColVals = {
element1: req.body.element1,
elementAttr1: req.body.elementAttr1,
element2: req.body.element2,
elementAttr2: req.body.elementAttr2,
element3: req.body.element3,
elementAttr3: req.body.elementAttr3,
}
});
orm.js
function objToSql(ob) {
// column1=value, column2=value2,...
var arr = [];
for (var key in ob) {
arr.push(key + "=" + ob[key]);
}
return arr.toString();
}
update: function(table, objColVals, condition, cb) {
var queryString = "UPDATE " + table;
queryString += " SET ";
queryString += objToSql(objColVals);
queryString += " WHERE ";
queryString += condition;
console.log(queryString);
connection.query(queryString, function(err, result) {
if (err) {
throw err;
}
cb(result);
});
},
如前所述,当我更新前端的特定对象时,我只希望它更新表中的相关列,而不更新表中的所有列。