我目前正在为我的 Neo4J 数据库使用 GrapheneDB,我正在从我的 Ember 应用程序中提取信息。Neo4J 需要基本 HTTP 身份验证,因为我想要一个更安全的方法(而不是在我的 ajax 调用中明确说明标头),我正在尝试使用 http-proxy 连接到数据库。因此,通过 Ember-CLI,我生成了一个 http-proxy,其路径位于“/api”。在代理文件中,我有以下内容:
~/服务器/代理/api.js
var proxyPath = '/api';
module.exports = function(app) {
// For options, see:
// https://github.com/nodejitsu/node-http-proxy
var proxy = require('http-proxy').createProxyServer({});
var path = require('path');
app.use(proxyPath, function(req, res, next){
var credentials = new Buffer('app-id:app-pw').toString('base64');
// include root path in proxied request
req.url = path.join(proxyPath, req.url);
req.headers.authorization = "Basic " + credentials;
proxy.web(req, res, { target: 'http://app-id.sb02.stations.graphenedb.com:24789/db/data/' });
});
};
因此,当运行上述内容时,在服务器上打印出的标头似乎是正确的:
{ host: 'localhost:4200',
connection: 'keep-alive',
'cache-control': 'max-age=0',
accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36',
'accept-encoding': 'gzip,deflate,sdch',
'accept-language': 'en-US,en;q=0.8',
authorization: 'Basic <correct base64 hash>' }
但是当转到我的 api URL 时,我得到以下请求标头:
GET /api HTTP/1.1
Host: localhost:4200
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
我得到一个 404 Not Found。但是当我删除授权标头时,我得到一个 401 Unauthorized 提示我输入用户名/密码。有时在标题上会显示:“授权:基本 Og==”。无论哪种方式都行不通。
有谁知道解决这个问题?我尝试了 node-http-proxy 文档中的示例 setHeader 代码,并在整个互联网上搜索了有关 ember http-proxy 的信息,但无济于事。先谢谢了!