ExpressJS - POST Router возвращает 404 - PullRequest
0 голосов
/ 10 октября 2019

Я довольно новичок в ExpressJS и просто настраиваю маленькое приложение со списком задач в сочетании с React. Я уже получаю свой список задач из базы данных mysql, но я борюсь с запросом POST для обновления / вставки в базу данных.

Когда я звоню http://localhost:9000/api/v1/todos/get,, маршрутизатор работает нормально и возвращаетожидаемое значение. Когда я звоню http://localhost:9000/api/v1/todos/add,, я всегда получаю 404.

app.js

let createError = require('http-errors');
let express = require('express');
let path = require('path');
let cookieParser = require('cookie-parser');
let logger = require('morgan');
let cors = require("cors");

let indexRouter = require('./routes/index');
let todosRouter = require('./routes/api/v1/todos');

let app = express();
app.use(cors());

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/api/v1/todos', todosRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

todos.js

let express    = require("express");
let router     = express.Router();
let config     = require("../../../config.json");
let mysql      = require('mysql');

router.post("/add", function(req, res) {
    // Do Something
    res.send("added");
});

router.get("/get", function(req, res, next) {
    let connection = mysql.createConnection({
        host    : config.dbHost,
        user    : config.dbUser,
        password: config.dbPass
    });

    connection.connect();
    connection.query('SELECT * FROM ' + config.dbName + '.`tablename`', function(err, rows, fields) {
        if (err) throw err;
        res.send(rows);
    });
    connection.end();
});

module.exports = router;

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 10 октября 2019

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

router.get("/add", function(req, res) {
    // Do Something
    res.send("added");
});

enter image description here

0 голосов
/ 10 октября 2019

В коде нет ничего плохого, проблема может быть из-за метода HTTP-запроса от клиента, используйте POST для /api/v1/todos/add. Я создал образец репо с вашим кодом и добавил тесты, см. репозиторий исходного кода github и просмотр тестов , чтобы получить больше ясности, особенно этого теста POST.

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