Node.js Express маршрут не работает. 404 Не Найдено - PullRequest
0 голосов
/ 19 апреля 2020

У меня есть топор ios после публикации в / users / add, и я получаю ошибку 404. Может кто-нибудь, пожалуйста, дайте мне некоторое представление о том, что я делаю неправильно, пожалуйста.

Сервер. js

app.use("/users", require("./routes/users"));

делает так, чтобы маршруты всех пользователей использовали пользовательский контроллер

const express = require("express");
const cors = require("cors");
const mongoose = require("mongoose");

require("dotenv").config();

const app = express();
const PORT = process.env.PORT || 3000;

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

const DATABASE = process.env.MONGODB_URI || "mongodb://localhost/MongoSetup";

mongoose.connect(DATABASE, {
  useNewUrlParser: true,
  useCreateIndex: true,
  useUnifiedTopology: true,
});
mongoose.connection.once("open", () =>
  console.log(`--> SERVER.JS: Connected to ${DATABASE}`)
);
mongoose.connection.on("error", (err) => {
  console.log(`Mongoose connection err:\n${err}`);
});

app.use("/exercises", require("./routes/exercises"));
app.use("/users", require("./routes/users"));

app.listen(PORT, () => {
  console.log(`--> SERVER.JS: Server Running: http://localhost:3000/`);
});

маршруты / пользователи. js

router.route("/add").post((req, res)

должен настроить маршрут для пользователей / добавить

const router = require("express").Router();
let User = require("../models/user.model");

router.route("/").get((req, res) => {
    User.find()
        .then(users => res.json(users))
        .catch(err => res.status(400).json("Error: " + err));
});

router.route("/add").post((req, res) => {
    const username = req.body.username;

    const newUser = new User({username});

    newUser.save()
        .then(() => res.json("User Added!"))
        .catch(err => res.status(400).json("Error: " + err));
});

module.exports = router;

create-user.component. js

axios.post("/users/add", user)

Следует отправить нового пользователя в / users / add

import React, { Component } from "react";
import axios from "axios";

export default class CreateUser extends Component {
  state = {
    username: "",
  };

  handleInputChange = (event) => {
    const { name, value } = event.target;

    this.setState({
      [name]: value,
    });
  };

  handleSubmit = (event) => {
    event.preventDefault();
    const user = {
        username: this.state.username
    }

    console.log(user);
    axios.post("/users/add", user)
        .then(res => console.log(res.data));

    this.setState({
        username: ""
    })
  };

  render() {
    return (
      <div>
        <h3>Create New User</h3>
        <form onSubmit={this.handleSubmit}>
            <div className="form-group">
                <label>Username: </label>
                <input 
                    required
                    name="username"
                    className="form-control"
                    value={this.state.username}
                    onChange={this.handleInputChange}
                />
            </div>
            <div className="form-group">
                <input type="submit" value="Create User" className="btn btn-primary" />
            </div>
        </form>
      </div>
    );
  }
}

1 Ответ

0 голосов
/ 19 апреля 2020

Вам нужно создать express экземпляр маршрутизатора только один раз и использовать его на всех ваших маршрутизаторах (users и exercises).

создать файл для фабрики маршрутов

const usersRoutes = require('../usersRoutes');
const exercisesRoutes = require('../exercisesRoutes');
const routerWapper = (router) => {
    usersRoutes(router)
    exercisesRoutes(router)

    return router
};
module.exports = routerWapper;

приложение. js

...
const express = require("express");
const app = express();
const router = app.router();
...
app.use('/', () => routerWapper(router));
...

маршрут пользователя

const userRoutes = (router) => {
    router.get("/users").get((req, res) => {
        User.find()
            .then(users => res.json(users))
            .catch(err => res.status(400).json("Error: " + err));
    });

    router.get("/users/add").post((req, res) => {
        const username = req.body.username;

        const newUser = new User({username});

        newUser.save()
            .then(() => res.json("User Added!"))
            .catch(err => res.status(400).json("Error: " + err));
    });
};

маршрут тренировки

const exercisesRoutes = (router) => {
    router.get("/exercises").get((req, res) => {
        User.find()
            .then(users => res.json(exercises))
            .catch(err => res.status(400).json("Error: " + err));
    });

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