8

我遇到了 Express 问题,我尝试使用 app.post() 函数,但它不起作用,我不知道为什么......

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

问题:页面加载没有响应,没有错误消息。我没有看到 console.log()...

应用程序.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'));
});

登录名玉:

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

4 回答 4

3

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

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

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

于 2013-02-09T09:59:13.860 回答
0

您的 post 请求被发送到/test(因为您使用action了表单的属性),而您的 express listener 正在监听任何 post 请求/login

您的代码应如下所示:

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

如果你想让这个工作!

于 2013-02-09T09:49:28.063 回答
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)”的需求时,它无法访问。

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

于 2019-09-27T17:17:12.090 回答
0

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

于 2017-10-18T08:42:36.293 回答