2013-06-04 4 views
4

У меня есть небольшое приложение node.js с использованием express framework, но по какой-то причине я не могу заставить приложение реагировать на запросы POST. В журнале сервера я просто получаю «POST/404 5ms», и я не могу понять, почему.Node.js express POST 404ing

EDIT: Для уточнения - Моя проблема не кажется, что app.post, чтобы делать что-нибудь

EDIT 2: Я как-то удалось решить эту последнюю ночь, но теперь я не могу понять, в какой точка i зафиксировала его.

Node.js код сервера:

var express = require('express') 
    , routes = require('./routes') 
    , user = require('./routes/user') 
    , http = require('http') 
    , path = require('path'); 

var app = express(); 

// all environments 
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(express.cookieParser('chocolatechip')); 
app.use(express.session()); 
app.use(app.router); 
app.use(express.static(path.join(__dirname, 'public'))); 


// development only 
if ('development' == app.get('env')) { 
    app.use(express.errorHandler()); 
} 

//pages 
//Landing page 
app.get('/', routes.index); 
app.post('/test',function(req,res){ 
    console.log(req.body); 
    res.send("received post"); 
}); 
//return list containing users 
//app.post('/users', user.list); 
//return requested user 
app.get('/users/:id', user.get); 
//app.post('/users/login', user.login); 


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

На фактической странице, у меня есть следующий код JavaScript:

var login = $('#login'); 
    var page = $('#page'); 
    var register = $('#register'); 
    var userField = login.find('.user'); 
    var passField = login.find('.pass'); 
    var confPassField = login.find('.confpass'); 
    var form = $('.logform'); 
    $('#formbutton').on('click',function(){ 
    if(register.hasClass('hidden')){ 
     login.addClass('hidden'); 
     confPassField.val(''); 
     var logDat = JSON.stringify(form.serializeArray); 
     userField.val(''); 
     passField.val(''); 
     page.html("Login form submitted"); 
     $.post(
     form.attr("action"), 
     {test:"test"}, 
     function(data){ 
      alert("Response: "+data) 
     } 
    ); 

    } 

ответ

9

Если вы публикуете в/в ваш журнал говорит, что вы "POST/404 5ms", вам необходимо изменить следующую строку:

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

к

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

Это позволит GET или POST к этому маршруту. Вы также можете использовать app.post(), если вы только отправляете на этот маршрут. Надеюсь это поможет.

Docs здесь: http://expressjs.com/api.html#app.all

+0

ну, это не ответ на мою проблему, поскольку я уже пользуюсь app.post(), и он не работает. Вот в чем моя проблема. – LucienK

+0

Вы используете app.post на «/ test», а не «/». Прочтите мой ответ более подробно. – thomallen

+0

И я говорю, что я проводил/тестировал, а не /. Я получил его на работу, это не проблема. Миг, чтобы заставить его работать прошлой ночью, и теперь я не могу вспомнить, какое изменение я сделал, сделал это. Кажется, у меня проблемы с фиксацией и маркировкой исправлений, когда я устал ... – LucienK

2

Убедитесь, что 'form.attr ("действие")' получает правильный URL. Кажется, что ваша форма отправляется на индексную страницу, а не на '/ test'. Может быть, это должно быть изменено на $('form').attr("action")

Смежные вопросы