2

初心者の質問があります。フラッシュ Facebook アプリケーションがあり、Facebook クレジットを使用しています。高速フレームワークを使用して、application.swf を含む静的 html ファイルを提供しています。

これは私がエクスプレスを設定する方法です:

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 要求の両方でアプリケーションを提供しています。着信 http 要求タイプが GET の場合にうまく機能します。

ただし、ユーザーがアプリでアイテムを購入すると、facebook は私のアプリケーションに POST リクエストを送信します。問題は、静的ファイル ディレクトリへの POST 要求を受信すると、express が 404 エラーをスローすることです。

PS : 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

2 に答える 2

4

静的ミドルウェアに使用するかどうかは関係ありません。リクエスト タイプがかallかどうかを確認するために、ルーターに依存しないチェックを実行します。したがって、app.all では使用せず、app.use 呼び出しに配置してください。ルーターではなく、アプリケーション スタック内にある必要があります。POSTHEAD

静的ミドルウェアに入る前にリクエストをインターセプトできます。静的のに別のミドルウェアを追加するだけで、次のようなもので十分です。

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

私はこれをテストしませんでした。

于 2012-08-17T12:24:02.700 に答える
0

私はそのようなプロジェクトに取り組みました。まず、「facebook がサーバーにアクセスできるか」を確認する必要があります。つまり、サーバーはポート 80 または 8080 を使用してインターネットからアクセスできる必要がありました。

于 2012-08-17T12:13:02.487 に答える