我正在发送带有数据作为对象数组的请求:
[
{id: "1"},
{id: "2"},
{id: "3"}
]
im使用JSON.stringify()
,而我的要求正文如下所示:
{ '{"id":"1"},{"id":"2"},{"id":"3"}': '' }
现在,我想遍历req.body并获取所有ID,以便可以从SQL DB中删除它们。 我正在使用Sequelize。 后端:
exports.deleteIds = (req, res, next) => {
console.log(req.body)
//here should be loop so i can delete all the ids one by one.
Model.destroy({
where: {
id:
}
})
}
帖子请求(客户):
let ids = []
//maybe here is the problem?
for (var i = 0; i < selectedRow.length; i++) {
ids.push({id:selectedData[i].id})
}
let Url = "/admin/deleteIds"
let data = JSON.stringify(ids)
event.preventDefault();
$.post(Url, data, function (data, status) {
}).done(function (res) {
if (res.ids.length == 0) {
$('#mainContent').html('<h1>0 users found</h1>')
}
})
.fail(function (err) {
console.log(err.responseJSON.message)
})
答案 0 :(得分:2)
通过发送ID数组和ID并直接在服务器中使用它,我们所做的一切甚至更加容易。
客户:
let ids = []
for (var i = 0; i < selectedRow.length; i++) {
ids.push(selectedData[i].id) // <-- this is the change
}
let Url = "/admin/deleteIds"
let data = {items: ids}
//...
服务器:
exports.deleteIds = (req, res, next) => {
const ids = req.body.items; // <-- no mapping needed
Model.destroy({
where: {id: ids}
})
}
POST调用主体应该是有效的JSON,这意味着它应该是js对象。
假设您使用访存
使用Fetch API将数据发送到服务器
const rawResponse = await fetch('https://httpbin.org/post', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({items: [ {id: "1"}, {id: "2"}, {id: "3"} ]})
});
首先,如果将req.body作为对象,则没有理由使用JSON.stringify
。如果不使用JSON.parse
或Express's body-parser
第二,您可能在数据库库中有一种方法可以发送多个ID进行销毁。
例如,如果您使用Sequelize.js:
exports.deleteIds = (req, res, next) => {
const ids = req.body.items.map(({id}) => id);
Model.destroy({
where: {id: ids}
})
}
如果此选项不存在,请循环:
exports.deleteIds = (req, res, next) => {
req.body.items.forEach(({id}) => {
Model.destroy({
where: {id}
})
})
}
您的固定POST呼叫:
let ids = []
for (var i = 0; i < selectedRow.length; i++) {
ids.push({id:selectedData[i].id})
}
let Url = "/admin/deleteIds"
let data = {items: ids} // <-- this is the change
event.preventDefault();
$.post(Url, data, function (data, status) {
}).done(function (res) {
if (res.ids.length == 0) {
$('#mainContent').html('<h1>0 users found</h1>')
}
})
.fail(function (err) {
console.log(err.responseJSON.message)
})
答案 1 :(得分:0)
正如另一个用户所说,req.body应该始终是有效的json,因此不太可能接收到数组。
当您收到有效的json请求时,在Sequelize中可以使用三种方法:
一个get()
函数,用于确定您从数据库中检索的内容:https://sequelize.org/master/manual/getters-setters-virtuals.html
模型上的set()
方法对要保存到数据库的内容运行函数:
const User = sequelize.define('user', {
username: DataTypes.STRING,
password: {
type: DataTypes.STRING,
set(value) {
this.setDataValue('password', hash(value));
}
}
});
try {
const result = await Organization.create({
name: req.body.name,
type: req.body.type,
slug: slugify(req.body.name, { lower: true, remove: /[*+~.()'"!:@]/g, strict: true }),
fields: allowedFields
}) catch(err) { etc.}