尝试连接mLab时遇跨域错误:localhost下http-server运行仍报错
我懂你现在的疑惑——明明已经用http-server把应用跑在localhost(正经的http协议)上了,却还是碰到了这个通常只在直接打开本地file://文件时才会出现的跨域错误。别慌,咱们一步步排查解决:
先确认你的mLab请求URL有没有写错
会不会不小心把mLab的连接地址写成了相对路径或者本地文件路径?比如误写了./mongodb://xxx或者file://xxx?mLab的正确请求URL必须是完整的http/https开头的地址,比如https://api.mlab.com/api/1/databases/你的数据库名/collections/你的集合名,仔细检查一下代码里的请求地址是不是标准的网络协议开头。再核对http-server的运行状态
确保你是在项目根目录下启动的http-server,而且访问应用时用的是http://localhost:xxxx(xxxx是你指定的端口,默认8080),绝对不是直接双击打开index.html(那会用file://协议)。可以看看浏览器地址栏,确认开头是http://而不是file://。检查mLab的CORS配置
就算你的应用在localhost,mLab那边可能默认限制了跨域请求。登录mLab控制台,找到你的数据库,看看有没有CORS相关的设置项——你需要把http://localhost:xxxx添加到允许的跨域来源列表里。另外,请求里一定要带上正确的mLab API密钥,这也是很多人容易忽略的点。排除浏览器缓存或插件干扰
有时候浏览器缓存了旧的请求记录,或者某些插件(比如广告拦截、跨域拦截类的)会偷偷干扰请求。试试清空浏览器缓存,或者用隐私/无痕模式打开页面,看看错误会不会消失。本地代理兜底方案
如果上面的方法都不管用,你可以让http-server帮你转发请求,绕过跨域问题。启动的时候加上代理参数就行:http-server -P https://api.mlab.com这样你的前端请求就可以写成本地相对路径,比如
/api/1/databases/...,由http-server自动转发到mLab,完美避开跨域限制。
内容的提问来源于stack exchange,提问作者Francisco Junior




