我想在Cappuccino中实现一个使用 Node.js 作为服务器的客户端应用程序。
我目前已经让 Node 与Express一起运行:
var express = require( 'express' );
var app = express();
app.get( '/an_endpoint', function(req, res){
res.send('Hello From Node Express!\n');
});
app.listen(1337);
可以通过以下方式验证:
$ node hello_echo.js
$ curl http://127.0.0.1:1337/an_endpoint
> Hello From Node Express!
就客户端代码而言,它是一个简单的小应用程序,带有一个在单击时执行此操作的按钮:
// in did finish launching
[button setTitle:"Ping Node"];
[button setTarget:self];
[button setAction:@selector(doPing:)];
- (void)doPing:(id)sender
{
var connection = [CPURLConnection connectionWithRequest:[CPURLRequest requestWithURL:'http://127.0.0.1:1337/an_endpoint/'] delegate:self];
}
- (void)connection:(CPURLConnection) connection didReceiveData:(CPString)data
{
alert('Node Says: ' + data);
}
- (void)connection:(CPURLConnection)connection didFailWithError:(CPString)error
{
alert('Error: ' + error);
}
当我加载应用程序( from http://127.0.0.1:8080/NewApplication/index.html
)并单击 OS X 上的 Google Chrome 中的按钮时,我在控制台中收到以下错误,第一个是由于后者:
OPTIONS http://127.0.0.1:1337/an_endpoint/ 404 (Not Found) Objective-J.js:716
XMLHttpRequest cannot load http://127.0.0.1:1337/an_endpoint/.
Origin http://127.0.0.1:8080 is not allowed by Access-Control-Allow-Origin.
这显然是由于我的节点服务器位于:1337,而我的 Cappuccino 应用程序位于:8080,由于端口部分,它们在技术上是不同的域。
一些研究使我看到了这篇文章,其中建议考虑使用 JSONP 将远程脚本注入应用程序。听起来很乱,所以如果没有必要,我不想走那条路。
所以,我的问题是,我怎样才能让 Cappuccino 和 Node.js 和谐地一起工作?似乎如果我可以告诉 Cappuccino 应用程序使用此 ( header("Access-Control-Allow-Origin", "*");
) 标头,一切都应该很好,但我不知道该怎么做。我尝试让 Node 发送该标头,但它似乎没有做任何事情。