app.post()不使用Express

时间:2013-02-09 09:37:32

标签: node.js post get express

我遇到了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")

4 个答案:

答案 0 :(得分:3)

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

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

一个建议是,您应该将每个响应发送给客户端,否则您的服务器将无响应。

答案 1 :(得分:0)

您的帖子请求会发送到/test(因为您使用了表单的action属性),而您的快速听众正在收听/login上的任何帖子请求。

您的代码应如下所示:

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

如果你希望这个工作!

答案 2 :(得分:0)

我将'router.post()...'复制到另一个js文件,并在app.js中更改路由,它有效!但'router.post()'方法仍然是一个警告。有时它似乎是一个webstorm中的警告,但它实际上可以工作!

答案 3 :(得分: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>

检查

此代码中的错误是,尽管的(类型)是“提交”,但尚未包含在标记内。现在,当您使用“ app.post”方法获取数据或尝试对需求进行“ console.log(value)”时,它无法访问。

我可以通过在表单中​​包含按钮标签来进行调试。