ExpressJs 服务器在使用 axios 的删除请求上从 VueJS 接收空请求对象,但 Postman 可以工作



我在前端使用带有Postgres/Knex/Objection和VueJS的ExpressJS。我有用户、组和成员资格 s.t.成员身份表关联用户和组。

我正在尝试通过发送groups_idusers_id来从 vue 中删除会员资格。

在邮递员中一切正常,但快递方面req.body是空的。

在 Vue方面,这是我的 Vuedelete方法:

async deleteMembership() {
await MembershipsService.deleteMembership({
membership: {
groupId: this.group.id,
userId: this.$store.getters.user.id
}
});
this.$emit("membership-deleted");
console.log('membership has been deleted');
}

这是我MembershipsService

import Api from '@/services/Api'
export default {
fetchMemberships () {
return Api().get('memberships')
},
...
deleteMembership (params) {
console.log('these are the request params: ', params);
return Api().delete('memberships/', params)
}
}

这是从快递一侧出发的路线:

router.delete('/', async (req, res) => {
// deletes a membership
console.log('this is the req: ', req);
await Membership
.query()
.delete()
.where('users_id', '=', req.body.membership.userId )
.andWhere('groups_id', '=', req.body.membership.groupId )
res.json({
success: true, message: 'membership deleted' 
});
});

这是工作邮递员的正文删除请求 http://localhost:8000/api/memberships:

{
"membership":
{ 
"userId": 8,
"groupId": 1 
}
}

这是 Vue.js 上的非工作请求的正文:

these are the request params:  {membership: {…}}membership: groupId: 1userId: 8__proto__: Object__proto__: Object

这是快递端的错误:

UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'userId' of undefined

这是 Express 中的req.body对象:

body: {}

Axios.delete()的第二个参数是一个config对象。(此处为打字稿类型定义。如果要传递正文,可以使用data配置选项:

axios.delete('https://some.url/resource', {data: {foo: 'bar': baz: 123}})

在您的情况下(假设Api()返回一个 axios 实例(:

deleteMembership (params) {
console.log('these are the request params: ', params);
return Api().delete('memberships/', {data: params})
}

演示:

axios.delete('https://reqres.in/api/users/2', {
data: {
foo: 'bar'
}
}).then(function(response) {
console.log(response);
});
<script src="https://unpkg.com/axios@0.19.0/dist/axios.min.js"></script>
Use the developer tools 'Network' tab to inspect the call and see the payload is sent.

最新更新