2012-07-09 1 views
0

나는 POST 요청을 수신 대기하도록 Express를 구성하는 방법에 대한 몇 가지 다른 질문을 읽었지만 서버에 보내는 간단한 POST 쿼리를 인쇄하려고 할 때 비어있는 JSON 또는 undefined를 지속적으로 얻는다. .express.js의 POST 요청 허용

내가이 설정 한 :

//routes 
require('./routes/signup.js')(app); 

// Configuration 
app.configure(function(){ 
    app.use(connect.bodyParser()); 
    app.use(express.methodOverride()); 
    app.register(".html", hulk); 
    app.set('views', __dirname + '/views'); 
    app.set('view options', {layout: false}); 
    app.set('view engine', 'hulk'); 
    app.use(express.static(__dirname + '/public')); 
    app.use(app.router); 
}); 

을 다음 routes/signup.js는 다음과 같습니다

{{> header.html }} 
{{> navigation.html }} 
{{> body.html }} 
<form action="/signup" method="post"> 
    <input name="email"/> 
    <input type="submit"/> 
</form> 
{{> footer.html }} 

이 있습니다 :

var common_functions = require('../common_functions.js'); 
var views   = require('../views/view_functions.js'); 
var globals   = require('../globals.js'); 
var mongoose   = require('mongoose'); 

//declare classes 
var User = mongoose.model('User'); 

module.exports = function(app){ 
    /** 
    * SignUp GET 
    */ 
    app.get('/signup', function(req, res){ 
     res.render('signup/signup.html'); 
    }); 

    /** 
    * SignUp POST 
    */ 
    app.post('/signup', function(req, res){ 
    console.log(JSON.stringify(req.body)); 
    console.log(req.body); 
    res.send(JSON.stringify(req.body)); 
}); 

}

템플릿은 다음과 같습니다 노히 어떤 부분들에 대해서도 특별한 관심이있다.

두 개의 console.log은 정의되지 않은 것을 인쇄하고 res.send()은 단순히 이전과 같은 html을 반환합니다. 여기서 내가 뭘 잘못하고 있니?

+0

경로 파일 전이나 구성 블록 이후에 넣었습니까? 그 이전 인 경우 라우터 미들웨어가 bodyParser보다 먼저 스택에 추가됩니다. 경로 파일을 configure 블록 아래로 이동하십시오. –

+0

옙 그것은 완전히 그것이었다. 원한다면 답으로 추가하면 받아 들일 것입니다! 감사. 자바 스크립트를 기억하는 것이 항상 중요합니다 INTERPRETED NOT COMPILED !!! –

답변

1

Express는 라우터 미들웨어가 아직 탑재되지 않은 경우 라우터의 동사 기능에 대한 첫 번째 호출시 자동 탑재됩니다. 따라서 config 블록 위의 경로에로드하여 라우터 미들웨어는 스택의 첫 번째 미들웨어 (bodyParser 위)입니다. 루트 파일을 configure 블록 아래로 이동하면이 문제가 해결됩니다. Express.js 워드 프로세서의 구성 섹션에서

:

Note the use of app.router, which can (optionally) be used to mount the application routes, otherwise the first call to app.get(), app.post(), etc will mount the routes.

http://expressjs.com/guide.html#configuration