我的网站由node&使用Express框架。 我的目标是设置代理以从Yahoo Placefinder api获取数据(因为它们不提供JSONP响应)。 我想将jquery ajax请求发送到代理并返回PlaceFinder api响应。
这是我的快速路线:
app.get('/placefinder/:curr_address', function (req, res) {
var options = {
host: 'where.yahooapis.com',
port: 80,
path: '/geocode?location=' + req.params.curr_address + '&flags=J&appid=[put app id here]'
};
var req = http.get(options, function (res2) {
console.log("Got response: " + res2.statusCode);
res2.setEncoding('utf8');
res2.on('data', function (chunk) {
console.log('BODY: ' + chunk);
res.render('response', {
response: chunk
}); // res.render
}); // on
}); // req
req.on('error', function (e) {
console.log("Got error: " + e.message + "... path: " + options.host + options.path);
});
// write data to request body
req.write('data\n');
req.write('data\n');});
以上代码正常运行。例如,我可以访问mywebsite.com/placefinder/123+fake+street,90210,并显示PlaceFinder api的响应。
问题是每个人都可以访问该页面并从PlaceFinder api获得响应。我不希望这样。我只希望我的(ajax)脚本可以访问。
如何使用一些基本身份验证仅允许我的ajax请求访问mywebsite.com/placefinder/123+fake+street,90210 ...我从未使用过基本身份验证而我无法计算如何将它应用于这种情况。
或者,有什么方法可以阻止所有外部访问的placefinder目录(有点像apache .htacess)?
答案 0 :(得分:1)
如何使用某些基本身份验证仅允许我的ajax 请求访问mywebsite.com/placefinder/123+fake+street,90210 ... 我从来没有使用过基本身份验证,我无法弄清楚如何使用 适用于这种情况。
我认为您不应该使用基本身份验证,而是使用sessions。 TJ确实有如何在https://github.com/visionmedia/express/tree/master/examples/session使用会话的示例。你应该研究更多的例子。 Connect也有一个中间件来处理basic auth。我不喜欢这种方法,因为它不安全,特别是在SSL后面不使用时。
或者,有什么方法可以阻止所有的placefinder目录 外部访问(有点像apache .htacess)?
在node.js中,每个应用程序都在一个单独的进程中运行。您只能绑定到host
而不是INADDR_ANY
。
app.listen([port [,host]])
将应用服务器绑定到给定端口,默认为3000.何时 省略主机所有连接都将通过INADDR_ANY接受。
app.listen(); app.listen(3000); app.listen(3000,'n.n.n.n');
您还可以将node.js与NGinx一起使用。比你使用像https://serverfault.com/questions/183884/nginx-protect-directory-with-password-except-for-specific-ips/183939#183939之类的东西。 NGinx非常强大。