2013-06-04 6 views
4

익스프레스 프레임 워크를 사용하여 작은 node.js 응용 프로그램이 있지만 어떤 이유로 응용 프로그램이 POST 요청에 응답하지 못합니다. 서버 로그에서 나는 단순히 "POST/404 5ms"를 얻었고 그 이유를 알 수 없습니다.Node.js express POST 404ing

편집 : 명확히하기 위해 - 내 문제는 app.post 아무것도에게 일을하지 않는 것입니다

편집 2 : 나는 어떻게 든이 마지막 밤을 해결하기 위해 관리,하지만 지금은 알아낼 수있는 포인트 내가 고정.

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')); 
}); 

, 내가있어 자바 스크립트 코드를 다음

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

당신이 당신의 로그가 말하는대로 /에 게시하는 경우

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

을하기 : 당신은 당신이 다음 줄을 변경해야합니다, "POST/404 5ms의"입니다
app.all('/', routes.index); 

이렇게하면 해당 경로로 GET 또는 POST 할 수 있습니다. 해당 경로에만 게시하는 경우 app.post()을 사용할 수도 있습니다. 희망이 도움이됩니다. 여기

문서 : http://expressjs.com/api.html#app.all

+0

글쎄, 내 문제는 이미 app.post()를 사용하여보고, 그리고 그것을 작동하지 않습니다보고 대답이 아닙니다. 그것이 내 문제입니다. – LucienK

+0

"/ testent"에서 app.post를 사용하고 있습니다. "/"가 아닙니다. 내 대답을 더 철저하게 읽으십시오. – thomallen

+0

그리고 저는 게시/테스트 였고/아닙니다. 나는 일하도록했다, 이것은 문제가 아니었다. 어젯밤에 작동하도록 망쳐 놓았는데, 지금 내가 만든 변경 사항을 기억하지 못합니다. 나는 피곤할 때 문제를 저지르고 제대로 고쳐주는 것 같습니다 ... – LucienK

2

가 'form.attr ("작업")은'적절한 URL을 받고 있는지 확인합니다. 양식이 '/ test'가 아니라 색인 페이지에 게시되고있는 것 같습니다. 어쩌면 변경해야합니다 $('form').attr("action")