Я хочу реализовать клиентское приложение на 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);
}
Когда я загружаю приложение (из http://127.0.0.1:8080/NewApplication/index.html
) и нажимаю кнопку в Google Chrome в OS X, я получаю следующие ошибки в консоли, первая из-за последней:
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 отправить этот заголовок, и, похоже, он ничего не сделал.