Axios отправляет 404 ошибки возможные причины или исправления?

#javascript #node.js #express #axios #mern

Вопрос:

эй, я очень новичок в MERN stack, и у меня возникли проблемы с публикацией данных в Axios и express. Возможно, я понял это неправильно, но вот в чем моя проблема. У меня есть форма на странице, с которой я пытаюсь отправить данные на серверную часть, где я затем консольно регистрирую их. страница представляет собой компонент, содержащий функцию onsubmit, которая отправляет запрос post на server.js которые затем утешают.регистрирует это, однако я получаю ОШИБКУ 404 при отправке. Зависимости должны быть установлены правильно

Это моя функция отправки

     onSubmit(e) {
        e.preventDefault();
        
        console.log(`Form submitted:`);
        console.log(` ${this.state.searchquery}`);
        
        const newSearchQuery = {
            searchquery: this.state.searchquery,
        };

        axios.post('http://localhost:3000/', newSearchQuery)
            .then(res => console.log(res.data)).then( 
                (response) => { console.log(response) },
                (error) => { console.log(error) }
            );;
        
        this.setState({
            searchquery: '',

        })
    }
 

это тот самый server.js файл

 const app = express();
const bodyParser = require('body-parser');
const cors = require('cors');
const todoRoutes = express.Router();
const PORT = 3000;


app.use(cors());
app.use(bodyParser.json());


todoRoutes.route('/').post(function(req, res) {
    console.log(req.body);
});

app.listen(PORT, function() {
    console.log("Server is running on Port: "   PORT);
});```
 

Ответ №1:

Приложение не настроено для использования маршрутов, и именно поэтому оно выдает 404.

Используйте эту строку после todoRoutes.Маршрут():

 app.use(todoRoutes);
 

app.use() используется для регистрации промежуточных программ в приложении основного узла. Поскольку вы используете промежуточное программное обеспечение router express, вам также необходимо зарегистрировать его.

РЕДАКТИРОВАТЬ: Это работает для меня. В случае, если вам нужен полный код:

ReactJS:

 import React from "react";
import axios from 'axios';

class App extends React.Component {
  constructor() {
    super();
    this.state = {
      searchquery: ''
    };
  }
  handleChange = (e) => {
    this.setState({ searchquery: e.target.value });
  }
  onSubmit = (e) => {
    e.preventDefault();
    
    console.log(`Form submitted:`);
    console.log(` ${this.state.searchquery}`);
    
    const newSearchQuery = {
        searchquery: this.state.searchquery,
    };

    axios.post('http://localhost:3000/', newSearchQuery)
        .then(res => console.log(res.data)).then( 
            (response) => { console.log(response) },
            (error) => { console.log(error) }
        );;
    
    this.setState({
        searchquery: '',
    })
  }
  render() {
    return (<form onSubmit={this.onSubmit}>
      <input type="text" value={this.state.searchquery} name="searchquery" id="searchquery" onChange={this.handleChange} />
      <button type="submit">Submit</button>
    </form>);
  }
}

export default App;
 

Экспресс-код:

 const express = require("express");
const app = express();
const bodyParser = require('body-parser');
const cors = require('cors');
const todoRoutes = express.Router();
const PORT = 3000;


app.use(cors());
app.use(bodyParser.json());


todoRoutes.route('/').post(function(req, res) {
    console.log(req.body);
});

app.use(todoRoutes);

app.listen(PORT, function() {
    console.log("Server is running on Port: "   PORT);
});
 

Комментарии:

1. Это не решило проблему

2. Это работает с моей стороны, и я вижу req.body , как вы входите в консоль сервера с переданными значениями. Я отредактировал приведенный выше ответ, чтобы включить полный код. Пожалуйста, посмотрите и посмотрите, поможет ли это.