Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
angularjs对nodejs api的http请求_Angularjs_Node.js_Http_Server - Fatal编程技术网

angularjs对nodejs api的http请求

angularjs对nodejs api的http请求,angularjs,node.js,http,server,Angularjs,Node.js,Http,Server,使用NodeJs,我设置了一个API,可以在浏览器中看到JSON结果。在Angular中,我有一个socket.io聊天,它通过端口3030上的http运行。我还使用xampp运行apache服务器,该服务器为AngularJs前端提供服务 只要我想从Angularjs向Nodejs API发出请求,我就会在浏览器控制台中得到以下错误 XMLHttpRequest cannot load localhost:3030/api/feed. Cross origin requests are onl

使用NodeJs,我设置了一个API,可以在浏览器中看到JSON结果。在Angular中,我有一个socket.io聊天,它通过端口3030上的http运行。我还使用xampp运行apache服务器,该服务器为AngularJs前端提供服务

只要我想从Angularjs向Nodejs API发出请求,我就会在浏览器控制台中得到以下错误

XMLHttpRequest cannot load localhost:3030/api/feed. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.
从谷歌搜索后我了解到,只要我没有在NodeJS中运行HTTP服务器,Angular就无法与API通信。 但是我可以在同一个进程中为api运行socket.io服务器和HTTP服务器吗

server.js
var express=需要“express”; var-app=express; var http=require'http'.Serverapp; var io=require'socket.io'http; var routes=require./app/api/routes'; 应用程序。使用“/api”路由; var chatMembers={}; io.on'connection',functionsocket{ socket.onnew-message,functionmsg{ console.logmsg; var username=msg[username]; var message=msg[message]; io.emitreceive-message,msg; } socket.onnew-connection,functionusername{ chatMembers[socket.id]=用户名; console.logchat成员; io.emitonline-list,createOnlineList; } socket.on断开连接、功能{ ifchatMembers[socket.id]!=未定义{ console.log+chatMembers[socket.id]+hat die Verbindung getrent。; 删除聊天室成员[socket.id]; io.emitonline-list,createOnlineList; } } }; 函数createOnlineList{ //返回连接到仅套接字名称的每个成员的列表 var onlinelist=[]; 成员中的forvar指数{ onlinelist.pushchatMembers[索引]; } 返回在线列表; } http.listen'3030',函数{ console.logServer在线; };
正如朱利安·索罗(Julian Soro)在上文中指出的那样,这是由于CORS政策

我以前在虚拟机上测试并访问主机上的API时,就处理过这个问题。如果您使用的是Chrome,那么提到有一个扩展来克服这个问题可能会有所帮助。您可以下载此扩展以允许在Chrome上使用CORS。是指向“允许控制允许原点:*”的链接


希望这能有所帮助。

这可能是一个浏览器CORS策略问题。因为您从一个端口加载angular应用程序,并对另一个端口进行Ajax调用,所以浏览器会阻止它。您可以执行以下操作之一:1。将NodeJS服务器设置为在基本url上为angular应用程序提供服务,如果不可能,则设置为2。在XAMPP服务器上配置代理设置,以将调用重定向到路径,即/api/*到localhost上的NodeJS应用程序:3030A第三个选项,只是为了让它工作,但实际上不建议您的生产api使用,它是accept all origins:@JulianSoro我尝试设置NodeJS服务器来运行我的Angularjs,这比预期的简单。我认为服务器现在也在运行。但是现在我得到一个AngularJs错误Uncaught error:[$injector:modulerr],并且没有加载任何内容。这是我的,如果有人在寻找带有Expressjs和MongoDB的Nodejs API样板文件的话。试试这个: