ไม่สามารถโพสต์แบบฟอร์ม node.js - express

การใช้ express 3.1.0 ฉันมีรูปแบบที่ง่ายมาก:

<form action="/signup" method="post">
    <div>
        <label>Username:</label>
        <input type="text" name="username"/><br/>
    </div>
    <div>
        <label>Password:</label>
        <input type="password" name="password"/>
    </div>
    <div><input type="submit" value="Sign Up"/></div>
</form>

และใน app.js:

/**
 * Module dependencies.
 */

var express = require('express')
  , routes = require('./routes')
  , fs = require('fs')
  , User = require('./models/User.js')
  , user = require('./routes/user')
  , http = require('http')
  , path = require('path');

var app = express();

app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(path.join(__dirname, 'public')));
});

app.configure('development', function(){
  app.use(express.errorHandler());
});

app.get('/', routes.index);
app.get('/form', function(req, res) {
    fs.readFile('./form.html', function(error, content) {
        if (error) {
            res.writeHead(500);
            res.end();
        }
        else {
            res.writeHead(200, { 'Content-Type': 'text/html' });
            res.end(content, 'utf-8');
        }
    });
});

app.post('/signup', function(req, res) {

    var username = req.body.username;
    var password = req.body.password;
    User.addUser(username, password, function(err, user) {
        if (err) throw err;
        res.redirect('/form');
    });
});

app.get('/users', user.list);


http.createServer(app).listen(app.get('port'), function(){
  console.log("Express server listening on port " + app.get('port'));
});

เมื่อพยายามโพสต์แบบฟอร์มนี้ ฉันได้รับ:

Cannot POST /signup

และในคอนโซล:

"NetworkError: 404 Not Found - http://localhost:3000/signup"

ฉันพลาดอะไรไปที่นี่?


person baba-dev    schedule 15.02.2013    source แหล่งที่มา


คำตอบ (3)


ตัวอย่างของคุณใช้ได้กับฉัน ฉันลบการอ้างอิงถึงผู้ใช้ ผู้ใช้ และเส้นทางเพื่อให้สามารถเรียกใช้ และได้รับ HTTP POST และแสดงอย่างถูกต้องในคอนโซล

app.post('/signup', function(req, res) {
    var username = req.body.username;
    var password = req.body.password;
    console.log("post received: %s %s", username, password);
});

ฉันสงสัยว่ามีข้อผิดพลาดอยู่ในรหัส User.addUser() ของคุณ

person Hector Correa    schedule 15.02.2013
comment
หลังจากเสียเวลากว่า 6 ชั่วโมง ในที่สุดก็พบวิธีแก้ปัญหาที่ฉันต้องการ ขอบคุณ - person Toretto; 16.01.2015
comment
@ baba-dev แล้วปัญหาคืออะไร? - person grantwparks; 27.11.2018

คุณสามารถเขียนสิ่งนี้:

action="http://localhost:3000/sin"
person sansan    schedule 09.12.2013

person    schedule
comment
พยายามอธิบายโค้ดแทนที่จะโพสต์เฉยๆ มันทำอะไร? คุณจะแก้ไขคำถามของ TC ด้วยวิธีการหรือที่ไหน? - person Nahuel Ianni; 05.11.2014
comment
@NahuelIanni ขอบคุณ :) จริงๆ แล้วฉันแค่เขียนส่วนที่เขาได้รับข้อผิดพลาด - person salangkar acharya; 16.11.2014