0

koa2 ctx.request.query 在我发出 ajax 请求时没有定义,但是当我在邮递员中发出这个“发布”请求时它工作正常。

在邮递员中,我可以获取查询对象 在此处输入图像描述

但是通过 axios 在此处输入图片描述

我的请求代码是

<template>
  <div id="login">
    <mt-field label="用户名" placeholder="请输入用户名" v-model="username"></mt-field>
    <mt-field label="密码" placeholder="请输入密码" type="password" v-model="password"></mt-field>
    <mt-button type="primary" @click="login">primary</mt-button>
  </div>
</template>

<script>

import Axios from 'axios'
export default {
  name: 'login',
  data () {
    return {
      username: '',
      password: ''
    }
  },
  mounted(){
    console.log(Axios)

  },
  methods: {
    login(){
      var username = this.username;
      var password = this.password;
      Axios({
        method: 'post',
        url: "api/user/login",
        data: {
          username: username,
          password: password,
        },
      }).then((res)=>{
        console.log(res)
        if(res.data.code !== 200) {
          console.log("登录失败")
        }
      });

    }
  }


}
</script>

后端:

'POST /api/user/login': async (ctx, next) => {
        ctx.response.type = 'application/json;charset=utf-8';
        console.log(ctx.request.query)
        await Db.User.login(ctx.query)
                .then(function(res){
                     ctx.response.body = res
                });
    }

我认为 koa2 ctx.request.query 中存在一些问题,如果它只接收特定的“表单”

4

1 回答 1

0

在您的 Postman 示例中,参数在查询字符串中传递:

POST /api/user/login?username=aa&password=aa

这意味着您可以通过ctx.request.query.

在您的 Axios 示例中,数据将在请求正文中传递(这对于 POST 请求更常见),这意味着您将需要类似koa-bodyparser的东西并通过ctx.request.body.

于 2017-04-25T07:33:18.087 回答