如何在 Cappuccino 中使用 Node.js?

Posted

技术标签:

【中文标题】如何在 Cappuccino 中使用 Node.js?【英文标题】:How Can I Use Node.js With Cappuccino? 【发布时间】:2012-08-27 04:36:21 【问题描述】:

我想在Cappuccino 中实现一个使用 Node.js 作为服务器的客户端应用程序。

我目前使用Express 运行 Node:

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)并单击按钮时,在 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,由于端口部分,它们在技术上是不同的域。

经过一番研究,我找到了this 的帖子,该帖子建议考虑使用 JSONP 将远程脚本注入应用程序。听起来很乱,所以如果没有必要,我不想走那条路。

所以,我的问题是,我怎样才能让 Cappuccino 和 Node.js 和谐地协同工作?似乎如果我可以告诉 Cappuccino 应用程序使用这个 (header("Access-Control-Allow-Origin", "*");) 标头,一切都应该很好,但我不知道该怎么做。我尝试让 Node 发送该标头,但它似乎没有做任何事情。

【问题讨论】:

【参考方案1】:

您应该使用 node 来提供 Cappuccino 应用程序,因此它们都在同一个端口上。

【讨论】:

我该怎么做?现在它正在使用一些 Jack 和 Jill 的东西。 Jack 是一个开发服务器,类似于 Rack。它仅用于通过 Chrome 本地开发的可怕同源策略。您提供 Cappuccino 应用程序的方式与使用 node/express 提供任何静态文件的方式相同。

以上是关于如何在 Cappuccino 中使用 Node.js?的主要内容,如果未能解决你的问题,请参考以下文章

我无法弄清楚如何防止在 Node.js 中出现此 CORS 错误 [重复]

角度如何与 Ionic 应用程序中的节点一起工作?

如何在 JSX 中使用 nodemon?

jQuery noConflict() 方法

Appcelerator Titanium Mobile 如何工作?

node.j和npm和webpack