我有一个项目,其中有一个iOS Objective-C应用程序试图与Node.js服务器交谈。我在node.js上使用socket.io (iOS)和socket.io。Socket.io在iOS设备和Node.js服务器之间不起作用
我想解决的问题是从设备获取消息到服务器,并让服务器返回响应。为此,我试图通过发送一条消息并预期包含该设备之后的数据的确认来做到这一点。
设备代码如下所示:
void (^serverAck)(uint64_t, void (^)(NSArray *)) = [_socket emitWithAck:@"ListProjects" withItems:@[]];
serverAck(0, ^(NSArray* data) {
if ([data count] == 0) {
NSError *error = [NSError errorWithDomain:@"CRXServer" code:1 userInfo:nil];
failureBlock(error);
} else {
successBlock(data);
}
});
而且Node.js的代码如下所示:
当我尝试运行此,getProjectsCallback
崩溃的服务器,因为它是不一个函数。从另一个线程发表的意见中,我明白如果对服务器的调用是正确的并且期待一个确认,这将是一个函数。
任何人都知道我做错了什么?
P.S.她是从socket.o日志转储显示收到的请求:
engine:socket packet +0ms
socket.io-parser decoded 20["getProjects"] as {"type":2,"nsp":"/","id":0,"data":["getProjects"]} +14ms
socket.io:socket got packet {"type":2,"nsp":"/","id":0,"data":["getProjects"]} +15ms
socket.io:socket emitting event ["getProjects"] +0ms
socket.io:socket attaching ack callback to event +0ms
Getting all projects ...
Releasing connection
Got the project list
/Users/derekclarkson/projects/crux-Server/node_modules/mysql/lib/protocol/Parser.js:82
throw err;
^
TypeError: getProjectsCallback is not a function
at getAllProjectsCallback (/Users/derekclarkson/projects/crux-Server/Server.js:20:13)
at Query.executeCodeblockCallback [as _callback] (/Users/derekclarkson/projects/crux-Server/Database.js:321:17)
所以看起来socket.io是否附着一个ACK,但不知何故,它没有被传递给回调。
Doh。当我想到这一点时,很明显。现在它正在工作。谢谢。 – drekka