Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ExpressJS-POST路由器返回404_Javascript_Node.js_Reactjs_Rest_Express - Fatal编程技术网

Javascript ExpressJS-POST路由器返回404

Javascript ExpressJS-POST路由器返回404,javascript,node.js,reactjs,rest,express,Javascript,Node.js,Reactjs,Rest,Express,我对ExpressJS还不太熟悉,只是在React中设置了一个小的待办事项列表应用程序。我确实已经从mysql数据库中获得了TODO列表,但我正在努力处理更新/插入数据库的POST请求 当我打电话时,路由器工作正常并返回预期值。当我打电话时,我总是得到一个404 app.js let createError = require('http-errors'); let express = require('express'); let path = require('path'); let coo

我对ExpressJS还不太熟悉,只是在React中设置了一个小的待办事项列表应用程序。我确实已经从mysql数据库中获得了TODO列表,但我正在努力处理更新/插入数据库的POST请求

当我打电话时,路由器工作正常并返回预期值。当我打电话时,我总是得到一个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;
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;
todos.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;
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;

我做错了什么?

代码中没有错误,问题可能是由于来自客户端的HTTP请求方法,请使用POST for
/api/v1/todos/add
。我用您的代码创建了一个示例repo,并添加了测试,请参见和查看以获得更清晰的信息,尤其是您应该使用get,因为您的添加路径是POST,所以它给出了404

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

如果这样更改会发生什么:
app.use('/api/v1/todos/',todosRouter)
todos
之后添加一个尾随
/
@toneyt当您点击/add api时,将方法更改为在客户端(邮递员等)发布。@toneyt未定义路由“add”的get方法,您必须在调用the POST方法之前添加router.get('/add',…)。@PraveenKumarPurushothaman-无更改。仍然是404。@toneyt获取/发布?我在本地工作。你是对的,我的react代码中还有一个错误。我刚刚创建了一个小的jquery POST请求,它工作得很好,给了我预期的结果。非常感谢。