Как я могу использовать Node.js с капучино?

Я хочу реализовать клиентское приложение на 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 отправить этот заголовок, и, похоже, он ничего не сделал.


person Josh    schedule 01.09.2012    source источник


Ответы (1)


Вы должны использовать узел для обслуживания приложения Cappuccino, чтобы все оно было на одном порту.

person Me1000    schedule 02.09.2012
comment
Как бы я это сделал? Прямо сейчас он использует что-то из Джека и Джилл. - person Josh; 02.09.2012
comment
Jack — это сервер разработки, похожий на Rack. Он используется только для того, чтобы справиться с ужасной политикой одного и того же происхождения для локальной разработки в Chrome. Вы обслуживаете приложение Cappuccino так же, как обслуживаете любой статический файл, используя node/express. - person Me1000; 02.09.2012