Express.js路由器发布请求返回404 [英] Express.js routers post request returns 404

查看:110
本文介绍了Express.js路由器发布请求返回404的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我尝试从html表单发送请求时,我的快递服务器返回404错误.但是,获取请求的工作正常.我已经为服务器和路由分离了文件.我无法在app.js中发出请求,因为请求太多(用于不同页面).我想向数据库发出插入后请求,但是我无法从表单中获取任何信息.

My express server returns 404 error when i try to send request from html form. However get request works fine. I have separated files for server and routes. I can't make requests in app.js, because there are too many of them (for different pages). I want to make post-insert request to db, but i just can't get any information from my form.

我有什么想念的吗?

我的html表单(精确地是ejs)

my html form (ejs precisely)

<form action="/add" method="POST">
     <input type="text" name="title" placeholder="Event name" />
     <input type="text" name="subcategory" placeholder="Category" />
     <input type="text" name="date" placeholder="Date" />
     <input type="text" name="place" placeholder="Place" />
     <input type="text" name="organisator" placeholder="Organisator" />
     <textarea name="description" placeholder="Description" onkeyup="adjust_textarea(this)"></textarea>
     <input type="submit" value="Add" />
 </form>

我的App.js文件(404处理程序出错)

my App.js file (error on 404 handler)

const express = require('express');
const path = require('path');
const logger = require('morgan');
const cookieParser = require('cookie-parser');
const bodyParser = require('body-parser');

var app = express();

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

//db connection
var mysql = require("mysql");
app.use(function(req, res, next){
    res.locals.connection = mysql.createConnection({
        host     : 'localhost',
        user     : 'root',
        password : 'mypassword',
        database : 'mydb'
    });
    res.locals.connection.connect();
    next();
});

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

app.use('/', require('./routes/index'));
app.use('/events', require('./routes/events'));

//handling errors
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

app.use(function(err, req, res, next) {
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};
  res.status(err.status || 500);
  res.render('error');
});

//server init
var http = require('http');

var server = http.createServer(app);
server.listen(4000);
if(server.listening){
  console.log('Server is listening on port 4000');
}

module.exports = app;

我的./routes/events.js文件

my ./routes/events.js file

const express = require('express');
const router = express.Router();

router.get('/', function (req, res, next) {
    let query = '*select query*';
    res.locals.connection.query(query, function (error, results, fields) {
        if (error) throw error;
        res.render('index', { title: 'Events', data: results });
    });
});

router.post('/add', function (req, res) {
    var obj = req.body.title;

    console.log(obj);
    res.redirect('/events');
});

我在浏览器中看到的内容

推荐答案

在"routes/events.js"文件中列出了添加"端点,这导致最终路由的结构为"/事件"/添加.'在您的表单中,您要发送到'/add'端点,因此要解决此问题,可以将表单上的action prop更改为'/events/add'或将'/add'端点移动到它自己的路由中,如下所示:

You have the 'add' endpoint listed in in your 'routes/events.js' file, which causes the structure of the final route to be '/events/add.' In your form, you are sending to the '/add' endpoint so to fix the issue, either change the action prop on the form to '/events/add' or move the '/add' endpoint into it's own route like this:

router.post('/add', function(req, res) {
    var obj = req.body.title;

    console.log(obj);
    res.redirect('/events');
});

这篇关于Express.js路由器发布请求返回404的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆