2

我有一个新手问题。我有一个 flash facebook 应用程序,它使用 facebook 积分。我使用 express 框架来提供包含 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 请求被发送到相同的 url,这对 GET 请求非常有效。

以下是监测结果:

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,它会对请求类型执行独立于路由器的检查,以查看它是POST还是HEAD. 所以,不要在 app.all 中使用它,只需放在 app.use 调用中即可。它应该在应用程序堆栈中,而不是路由器中。

您可以在请求进入静态中间件之前拦截请求,只需在静态之前添加另一个中间件,这样就足够了:

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 回答