使用Express时app.post()无法工作

8

我遇到了一个Express的问题,我尝试使用app.post()函数但它不起作用,我不知道原因...

虽然我包含了bodyParser()...

问题:页面没有响应,也没有错误信息。我看不到console.log()...

app.js:

var express = require('express')
    , routes = require('./routes')
    , user = require('./routes/user')
    , postProvider = require('./postProvider.js')
    , http = require('http')
    , path = require('path')
    , compass = require('node-compass')
    , hash = require('./auth').hash;

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(compass());
    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.use(express.cookieParser('dsqdq edsds'));
    app.use(express.session());
});

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

app.get('/admin', function(req, res){
    res.redirect('login');
});

app.get('/login', function(req, res){
    res.render('login');
});

app.post('/login', function(req, res){
    console.log('test');
});

app.get('/', routes.index);

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

`login.jade:`
extends layout

block content
  h1 Login
  h3 "tj" and "foobar"
  form(method="post", action="/login")
    input(type="text", placeholder="Username", autofocus="true", name="username")
    br
    input(type="password", placeholder="Password", name="password")
    br
    input(type="submit", value="login")

是的,添加 body-parser。 - kta
4个回答

3

我没有发现app.post代码有任何问题!!

app.post('/login', function(req, res){
    console.log('test');
    res.end(); // end the response
});

一个建议是每次向客户端发送响应后,您应该结束请求,否则您的服务器将变得无响应。

OP 更改了jade模板,现在一切都好 :) - drinchev
我找到了问题,但不明白为什么当我注释掉 "app.use(compass());" 后它可以运行,而当我取消注释时却无法工作。这是Compass的问题吗? - tonymx227
你正在尝试从你的 app.post() 渲染一个页面或视图,它是 login 吗? - BRogers
我在使用app.post()时遇到了问题,当一次性发布太多内容时,我的node.js服务器会冻结(超时)一段时间。感谢这个解决方案! - Leths

0

您的POST请求已发送到/test(因为您使用了表单的action属性),而您的Express监听器正在侦听/login上的任何POST请求。

您的代码应该如下所示:

block content
  h1 Login
  h3 "tj" and "foobar"
  form(method="post", action="/login")

如果你希望它正常工作!


0

我将'router.post()...'复制到另一个js文件中,并在app.js中更改路由,它可以工作!但是'router.post()'方法仍然会出现警告。有时它在WebStorm中看起来像是一个警告,但实际上它可以正常工作!


0

虽然我还没有完全浏览这里提到的整个代码,但我遇到了类似的问题并且成功地进行了调试。

我将分享我犯的错误,希望能对其他人有所帮助。

以下代码是出现问题的 HTML 部分:

<form action="/" method="**post**">

    <select name="crypto">
        <option value="BTC">Bitcoin</option>
        <option value="ETC">Ethereum</option>
        <option value="LTC">Litecoin</option>
    </select>

    <select name="fiat">
        <option value="USD">US Dollors</option>
        <option value="GBP">GB Pounds</option>
        <option value="EUR">EU Euros</option>
    </select>

</form>

检查

这段代码中的错误是,虽然(type)的类型是"submit",但它没有被包含在标签内。现在,当您使用"app.post"方法获取数据或尝试"console.log(value)"需求时,它无法访问。

我通过在表单内包含按钮标签来进行调试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接