No se puede POST formar node.js – express

Usando Express 3.1.0 tengo una forma super simple:

 

y en la 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')); }); 

Cuando bash publicar este formulario obtengo:

 Cannot POST /signup 

y en la consola:

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

¿que me estoy perdiendo aqui?

Tu ejemplo funciona para mí. Eliminé las referencias a Usuario, usuario y rutas para que pueda ejecutarlo y se reciba HTTP POST y se muestre correctamente en la consola.

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

Sospecho que el error está en su código User.addUser ().

 router.route('/signup') // (accessed at POST http://localhost:3000/api/signup) .post(function(req, res) { var username = req.body.username; var password = req.body.password; res.json( { message: 'signup success', username : username, password : password, } ); }) .get(function(req,res){ res.json({message: 'get request from signup'}); }); // REGISTER OUR ROUTES ------------------------------- // all of our routes will be prefixed with /api app.use('/api', router); 

Puedes escribir algo como esto:

 action="http://localhost:3000/sin"