最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

Axios Node.Js带有参数的GET请求未定义

IT培训 admin 6浏览 0评论

Axios Node.Js带有参数的GET请求未定义

我正在后端运行带有nodejs的React应用。每当我进行不带参数的axios调用时,一切正常,但是当我尝试添加参数并将其与req.body.variableName一起使用时,它将输出未定义的内容。打印req.body只是一个空的花括号,因此不发送我的数据。

带有axios调用的响应文件

getFriendCount(){
    var data = {
        UserID: this.state.UserID,
    }
    console.log(data)
    axios.get("http://localhost:8081/getFriendCount", data).then((response)=>{
        if (response.status >= 400) {
            console.log(response.status);
            throw new Error("Bad response from server");
        } else{
            return response.data[0].friendCount
        }
    }).then((data)=>{
        console.log(data)
        this.setState({count: data})
    })
}

serversql.js

const HTTP_PORT = process.env.PORT || 8081;
const express = require("express");
const bodyParser = require('body-parser');
const app = express();
const urlencodedParser = bodyParser.urlencoded({ extended: false });
const cors = require("cors");
const mysql = require('mysql');

app.use(cors());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

const {addNewMemory,getAllMemories, getFriendCount} = require('./db-services.js');

//Database connection...

app.get('/data', getAllMemories);
app.post('/addMemory',urlencodedParser,addNewMemory);
app.get('/getFriendCount',urlencodedParser, getFriendCount);

app.listen(HTTP_PORT, ()=>{console.log("API listening on: " + HTTP_PORT)});

db-services.js(req.body.UserID未定义)

module.exports={
  getFriendCount:(req,res) => {
    console.log(req.body)        //empty curly brace
    console.log(req.body.UserID) //undefined
    console.log(req.params)      //empty curly brace
    var sql = "SELECT COUNT(*) AS friendCount FROM friendship WHERE UserId1 = (?) OR UserId2 = (?)";
    var values = [req.body.UserID, req.body.UserID]
    dbconnection.query(sql, values, function(err,result,fields){
        if(err){
            return res.status(500).send(err);
        } else {
            res.send(result);
        }
    })
},
}
回答如下:

Axios.get()中,数据表示参数,而不是主体数据。因此,请使用req.params代替主体。然后,您以这种方式使用路由。

app.get('/getFriendCount/:Id',urlencodedParser, getFriendCount);

然后请在下面使用此ID。

console.log(req.params.Id);

然后您需要像这样更改您的API。

axios.get(`http://localhost:8081/getFriendCount/${this.state.UserID}`)

请尝试这个。

Axios Node.Js带有参数的GET请求未定义

我正在后端运行带有nodejs的React应用。每当我进行不带参数的axios调用时,一切正常,但是当我尝试添加参数并将其与req.body.variableName一起使用时,它将输出未定义的内容。打印req.body只是一个空的花括号,因此不发送我的数据。

带有axios调用的响应文件

getFriendCount(){
    var data = {
        UserID: this.state.UserID,
    }
    console.log(data)
    axios.get("http://localhost:8081/getFriendCount", data).then((response)=>{
        if (response.status >= 400) {
            console.log(response.status);
            throw new Error("Bad response from server");
        } else{
            return response.data[0].friendCount
        }
    }).then((data)=>{
        console.log(data)
        this.setState({count: data})
    })
}

serversql.js

const HTTP_PORT = process.env.PORT || 8081;
const express = require("express");
const bodyParser = require('body-parser');
const app = express();
const urlencodedParser = bodyParser.urlencoded({ extended: false });
const cors = require("cors");
const mysql = require('mysql');

app.use(cors());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

const {addNewMemory,getAllMemories, getFriendCount} = require('./db-services.js');

//Database connection...

app.get('/data', getAllMemories);
app.post('/addMemory',urlencodedParser,addNewMemory);
app.get('/getFriendCount',urlencodedParser, getFriendCount);

app.listen(HTTP_PORT, ()=>{console.log("API listening on: " + HTTP_PORT)});

db-services.js(req.body.UserID未定义)

module.exports={
  getFriendCount:(req,res) => {
    console.log(req.body)        //empty curly brace
    console.log(req.body.UserID) //undefined
    console.log(req.params)      //empty curly brace
    var sql = "SELECT COUNT(*) AS friendCount FROM friendship WHERE UserId1 = (?) OR UserId2 = (?)";
    var values = [req.body.UserID, req.body.UserID]
    dbconnection.query(sql, values, function(err,result,fields){
        if(err){
            return res.status(500).send(err);
        } else {
            res.send(result);
        }
    })
},
}
回答如下:

Axios.get()中,数据表示参数,而不是主体数据。因此,请使用req.params代替主体。然后,您以这种方式使用路由。

app.get('/getFriendCount/:Id',urlencodedParser, getFriendCount);

然后请在下面使用此ID。

console.log(req.params.Id);

然后您需要像这样更改您的API。

axios.get(`http://localhost:8081/getFriendCount/${this.state.UserID}`)

请尝试这个。

发布评论

评论列表 (0)

  1. 暂无评论