2013-02-15 55 views
21

使用快速3.1.0。我有一个超级简单的形式:无法发布形式的node.js - 表达

<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" 

我在这里错过了什么?

回答

21

你的例子适合我。我删除了对用户,用户和路由的引用,以便我可以运行它并在控制台中正确接收并显示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()代码中。

+0

正确。该问题的确在User.addUser()中。谢谢 – 2013-02-15 21:10:47

+0

浪费了6个多小时后,终于找到了我要找的解决方案。谢谢 – Toretto 2015-01-16 09:19:53

0

你可以写这样的事情:

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

只要重新启动您的应用程序,每一件事情都会好起来去;)

都发生了什么事是你的应用程序运行时,您已经添加了一些代码。为了使新代码的效果只是重新运行您的节点应用程序

+5

哦!这个答案 - 呃有胆量 – rneha725 2016-03-22 16:54:40

6
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); 
+6

尝试解释代码,而不是只发布它。它有什么作用?你如何或在哪里解决TC的问题? – 2014-11-05 11:25:33

+1

@NahuelIanni谢谢。 :)其实我只是写了他得到错误的部分。 – 2014-11-16 06:23:00