Axios Node.Js GET-запрос с параметрами не определен - PullRequest
0 голосов
/ 01 октября 2019

Я запускаю приложение реагирования с nodejs на сервере. Всякий раз, когда я делаю вызов 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);
        }
    })
},
}

Ответы [ 2 ]

1 голос
/ 01 октября 2019

В 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 голосов
/ 01 октября 2019

Если вы хотите отправить body, вы не можете использовать метод GET. В этом случае следует использовать только метод POST или PUT. Методы GET будут принимать только param и query, где `params можно использовать следующим образом:

app.get('/getFriendCount/:id', handler);

, если вы вызовете /getFriendCount/123, req.param.id вернется123

и query можно использовать следующим образом:

/getFriendCount?name=pedro - запрос запроса даст { name:"pedro" }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...