Node.js / Express / Jade POST表单404s

时间:2014-08-30 04:51:01

标签: node.js forms post express pug

所以,我是Javascript的新手(以及一般的编码)。为了补充我对Javascript的教育,我想我一点都不喜欢Node.js.我想我需要一个项目,我认为我会尝试制作一个龙与地下城。龙角色创造者。已经有一些,但我需要一个项目,对吗?

所以我创建了一个带有角色名称的表单,然后不是把它放到控制台上和/或在页面上显示它,我得到了404.我必须在这里简单一些,所以几个小时之后试图弄清楚有什么是我自己做的一件简单的事情并做了大量的搜索引擎工作,我想我会把它带到社区。

现在我有了基本框架:

express --css myapp

没有添加任何幻想。这是我的app.js(注意app.post的最后一行:

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

var routes = require('./routes/index');
var users = require('./routes/users');

var app = express();

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

// uncomment after placing your favicon in /public
//app.use(favicon(__dirname + '/public/favicon.ico'));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', routes);
app.use('/users', users);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
    var err = new Error('Not Found');
    err.status = 404;
    next(err);
});

// error handlers

// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
    app.use(function(err, req, res, next) {
        res.status(err.status || 500);
        res.render('error', {
            message: err.message,
            error: err
        });
    });
}

// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
        message: err.message,
        error: {}
    });
});

module.exports = app;

app.post('/', function(req, res) {
    console.log(req.body);
    console.log('Character: ' + req.body.charactername);
    res.send('Character Name: ' + req.body.charactername);
});

最后,我的玉文件带有表单。

extends layout

block content
  h1= title
  p Welcome to #{title}
  form(method='post',action='/')
    input(type='text',name='charactername')
    input(type='submit')

就像我说的那样,它当然很简单,但它让我疯狂,我似乎无法找到一个文档,网页,howto或教程来解释我的内容。我在这里做错了。

1 个答案:

答案 0 :(得分:1)

app.post('/', function(req, res) {});位于404错误处理路径之后。将它移动到以前:

// catch 404 and forward to error handler
app.use(function(req, res, next) {
    var err = new Error('Not Found');
    err.status = 404;
    next(err);
});

只要您的其他路线(app.use('/', routes))没有任何冲突,这将有效。