使用快递不能POST /错误

时间:2016-03-11 02:26:32

标签: node.js express

我正在尝试使用express创建一个简单的表单处理程序。我为我的表单尝试了以下代码:

<form class="form"  action="/" method="post" name="regForm">              
    <div class="form-group">
        <input type="text" name="username" class="form-control" id="username" placeholder="Username">
    </div>
    <button type="submit" class="btn btn-default">Submit</button>
</form>

这是我的app.js代码:

const port = 3000;

var express = require('express'),
    app = express(),
    server = require('http').createServer(app);
var bodyParser = require('body-parser');

app.use(express.static(__dirname + '/public'));

app.use(bodyParser.urlencoded({
   extended: true;
}));

app.use(bodyParser.json());

app.post('/',function(req,res){
   var username = req.body.username;
   var html = 'Hello:' + username;
   res.send(html);
   console.log(html);
});

server.listen(port);

我一直收到错误&#34;无法发布/&#34;提交表格后。我错过了像模块这样的东西吗?

5 个答案:

答案 0 :(得分:16)

这样你应该尝试

const port = 3000;

var express = require('express'),
    app = express();
var bodyParser = require('body-parser');

app.use(express.static(__dirname + '/public'));

app.use(bodyParser.urlencoded({
   extended: false
}));

app.use(bodyParser.json());

app.get('/', function(req, res){
  res.render('form');// if jade
  // You should use one of line depending on type of frontend you are with
  res.sendFile(__dirname + '/form.html'); //if html file is root directory
 res.sendFile("index.html"); //if html file is within public directory
});

app.post('/',function(req,res){
   var username = req.body.username;
   var htmlData = 'Hello:' + username;
   res.send(htmlData);
   console.log(htmlData);
});

app.listen(port);

您应该记住以后的事情参考:

  1. 您正在将网址编码扩展为true
  2. 您没有收到表格的任何要求
  3. 您使用的是HTML命名变量,这是一种不良做法
  4. 谢谢&amp;干杯

答案 1 :(得分:1)

似乎在这里工作正常。

我找到的唯一错误是:

extended: true;

您需要在结尾处删除分号。

此外,您不需要采取行动=&#34; /&#34;在您的表单标签中,仅供参考。

答案 2 :(得分:1)

另一种方法是我们可以使用express提供的.route方法

https://expressjs.com/en/guide/routing.html

例如:

app.route("url")
   .get(function())

   .post(function());

请记住使用半冒号关闭.route函数;

答案 3 :(得分:1)

就我而言,我没有注意发布的网址。

我有一个页面登录名http://localhost:5000/login正在发布,如果成功,则呈现页面帐户http://localhost:5000/account

但是,在这2个页面上播放了几次,链接保持在http://localhost:5000/account,但显示了登录页面。因此,当我单击带有formmethod = "post"的登录按钮时,出现了错误Cannot POST /account

因此,解决方法是通过输入登录页面http://localhost:5000/login的网址来正确呈现登录页面。

答案 4 :(得分:0)

You should call router instead of app
const router = express.Router();

router.use(bodyParser.urlencoded({ extended: false }));

router.post('/',function(req,res){
   var username = req.body.username;
   var htmlData = 'Hello:' + username;
   res.send(htmlData);
   console.log(htmlData);
});