我正在尝试在另一个nodejs / express app的子目录中设置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.据我所知,登录页面不会出现在博客/目录之外的任何地方,为什么会失败?
如果我直接查看博客(在端口2368上),我可以正常登录。
答案 0 :(得分:2)
您已为GET定义了路由,因此您只代理GET请求,但登录和注册使用POST请求。通常Apache或nginx中的代理规则将代理给定URL的所有允许方法,但由于您通过方法定义处理程序,因此不会发生这种情况。
注册POST获得404,因为它由您的第一个不知道该做什么的节点应用程序处理。
除了POST之外,您还需要DELETE方法才能点击通知消息并删除帖子。我不确定是否还需要其他方法(OPTIONS),GET,POST和DELETE是我观察到的唯一方法,如果你查看页面所做的请求,你会看到哪个方法失败了。与Firebug。
要解决此问题,请添加您添加的相同处理程序,以及用于发布,放置和删除的内容:
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'
});
});
这样,管理界面工作正常。