2

我正在尝试在另一个 nodejs/express 应用程序的子目录中设置 Ghost 博客程序 (v0.4)。我能够按照此处概述的步骤使其工作:Node http-proxy and express

因此,我通过 Express 从我的主应用程序将代理设置为 Ghost,如下所示(在我的开发机器上):'

var proxy = new httpProxy.createProxyServer();
server.get('/blog*', function (req, res, next) {
    proxy.web(req, res, {
        target: 'http://localhost:2368'
    });
});

这可以访问博客内容。但是,当我去 /blog/ghost/signin 并尝试登录时,我得到一个 404。据我所知,登录页面不会出现在 blog/ 目录之外的任何地方,那为什么会失败呢?

如果我直接查看博客(在端口 2368 上),我可以正常登录。

4

1 回答 1

2

您只为 GET 定义了一个路由,因此您只是代理 GET 请求,但登录和注册使用 POST 请求。通常,Apache 或 nginx 中的代理规则将代理给定 url 的所有允许方法,但由于您通过方法定义处理程序,这不会发生。

注册 POST 得到 404,因为它由您的第一个不知道该做什么的节点应用程序处理。

除了 POST 之外,您还需要 DELETE 方法才能单击通知消息并删除帖子。我不确定是否还需要其他方法(选项),GET、POST 和 DELETE 是我观察到的唯一方法,如果您查看页面所做的请求(例如使用 Firebug),您将看到哪个方法失败。

要解决此问题,请添加您使用 get 添加的相同处理程序以用于发布、放置和删除:

server.post('/blog*', function (req, res, next) {
    proxy.web(req, res, {
        target: 'http://localhost:2368'
    });
});
server.delete('/blog*', function (req, res, next) {
    proxy.web(req, res, {
        target: 'http://localhost:2368'
    });
});
server.put('/blog*', function (req, res, next) {
    proxy.web(req, res, {
        target: 'http://localhost:2368'
    });
});

这样,管理界面就可以正常工作。

于 2014-02-01T19:26:30.107 回答