angularjs对nodejs api的http请求
使用NodeJs,我设置了一个API,可以在浏览器中看到JSON结果。在Angular中,我有一个socket.io聊天,它通过端口3030上的http运行。我还使用xampp运行apache服务器,该服务器为AngularJs前端提供服务 只要我想从Angularjs向Nodejs API发出请求,我就会在浏览器控制台中得到以下错误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
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样板文件的话。试试这个: