2012-08-17 2 views
2

초보자 용 질문이 있습니다. 나는 플래시 페이스 북 응용 프로그램을 가지고 있으며 페이스 북 크레딧을 사용합니다. 나는 expressive 프레임 워크를 사용하여 정적 HTML 파일을 제공하는데 여기에는 application.swf가 들어 있습니다.express.static가 POST 요청에 응답 할 수 없음

var app = express(); 

app.configure(function(){ 
    app.use(express.methodOverride()); 
    app.use(express.bodyParser()); 
    app.use(express.logger()); 
    app.use(app.router); 

    // Redirections for default pages 
    app.all("/", function(req, res) { res.redirect("/index.html"); }); 
    app.all("/facebook", function(req, res) { res.redirect("/facebook/index.html"); }); 

    // Serve static files 
    app.all("*", express.static('/my/static/files/directory')); 
    app.use(express.errorHandler({ 
     dumpExceptions: true, 
     showStack: true 
    })); 
}); 

require('http').createServer(app).listen(80); 
require('https').createServer({ 
    key: fs.readFileSync('./certs/www.app.org/www.app.org.key'), 
    cert: fs.readFileSync('./certs/www.app.org/www_app_org.crt'), 
    ca: fs.readFileSync('./certs/www.app.org/www_app_org.ca-bundle'), 
}, app).listen(443); 

내가 HTTP와 HTTPS 요청에 내 응용 프로그램을 제공하기 위해이 구조를 사용

이것은 내가 Express를 구성하는 방법입니다. 들어오는 HTTP 요청 유형이 GET 일 때 잘 작동합니다.

그러나 사용자가 앱에서 항목을 구입하면 Facebook에서 내 애플리케이션으로 POST 요청을 보냅니다. POST 요청을 정적 파일 디렉토리에 수신 할 때 Express가 404 오류를 발생시킵니다.

P. : POST 요청은 GET 요청에서 매우 잘 작동하는 동일한 URL로 전송됩니다. "? 당신의 서버에 액세스 페이스 북의 수"

node_local:httpserver 88.250.59.159 - - [Fri, 17 Aug 2012 11:51:09 GMT] "POST /facebook/index.html HTTP/1.1" 404 - "-" "Apache-HttpClient/4.1.3 (java 1.5)" 

node_local:httpserver 88.250.59.159 - - [Fri, 17 Aug 2012 11:50:59 GMT] "GET /facebook/index.html HTTP/1.1" 200 5892 "-" "Apache-HttpClient/4.1.3 (java 1.5)" 

답변

4

정적 미들웨어에 all을 사용하면 상관 없습니다. 요청 유형이 라우터 유형인지 확인하여 POST 또는 HEAD인지 확인하십시오. 따라서 app.all에서 사용하지 말고 app.use 호출을 사용하십시오. 라우터가 아닌 응용 프로그램 스택 내에 있어야합니다. 이 정적 미들웨어로 전환하기 전에

당신은 단지 정적 전에 다른 미들웨어 를 추가 요청을 가로 챌 수있는이 같은 충분해야

app.post("/facebook/index.html", function(req, res, next) { 
    req.method = "GET"; 
    next(); 
}); 

그래도 난 이것을 테스트하지 않았다.

+1

완벽하게 합리적인, 그리고 잘 작동합니다 ... –

+0

나는 그것도 테스트, 잘 작동합니다. – Nadjib

0

내가 먼저 당신이 있는지 확인해야한다, 그런 프로젝트에 근무 : 여기

는 모니터링 결과이다. 즉, 포트 80 또는 8080을 사용하여 인터넷을 통해 서버에 액세스 할 수 있어야합니다.

+0

예. 나는 페이스 북의 내 응용 프로그램에 연결할 수 있습니다. 모든 GET 요청은 효과가 있습니다. 문제없이 응용 프로그램을 사용할 수 있습니다. –

+0

또한 해당 웹 페이지 [링크] (http://clientexpressjs.com/examples/processing_url_and_post_parameters) – historyoftheviolence