【问题标题】:Cannot POST form node.js - express无法发布表单 node.js - 表达
【发布时间】:2023-03-20 21:18:02
【问题描述】:

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

我在这里错过了什么?

【问题讨论】:

    标签: node.js express


    【解决方案1】:

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

    【讨论】:

    • 浪费了6个多小时,终于找到了我想要的解决方案。谢谢
    • @baba-dev 那么问题出在哪里?
    【解决方案2】:
    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);
    

    【讨论】:

    • 尝试解释代码而不是仅仅发布它。它有什么作用?您如何或在哪里解决 TC 的问题?
    • @NahuelIanni 谢谢。 :) 实际上我只是在写他得到错误的部分。
    【解决方案3】:

    你可以这样写:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-26
      • 2011-09-09
      • 1970-01-01
      • 2017-01-11
      相关资源
      最近更新 更多