网站的页面和服务器API以及写好,并且在本地环境中调试成功。所有的功能都没有异常,当我将其部署到阿里云轻量级服务器上的时候,问题出现了。
Provisional headers are shown 报错
这个报错的翻译是临时请求报文头,简单来说就是请求没有发出去
为什么回报这个错误?
通过研究控制台的报文请求发现:
Request URL:http://localhost:3000, 而发送请求的源地址是:http://47.xxx.xxx.xx (一个明确的地址)。所以,这里的问题就是http://47.xxx.xxx.xx 这个地址发送了一个对 http://localhost:3000 ,然后浏览器把 http://localhost:3000 认为了是本机的服务器,可是本机上并没有我的API服务器。会导致这个错误是因为,在开发的时候为了方便测试,直接使用了http://localhost:3000 这个本机的地址。
解决方案:
把http://localhost:3000 这个服务器地址 改为明确的 http://47.xxx.xxx.xx:3000, 然后重新构建代码,在上传到服务器,然后启动node
textStatus: timeout
连接网络时发生异常。我再一次访问http://47.xxx.xxx.xx 的服务器地址,可以成功的返回页面,可是还是无法获取到数据。重新查看控制台中的网络请求信息,又看到了Provisional headers are shown。
这时我开始怀疑,这到底是不是请求没有发出去???我使用了一个API接口调试工具去访问http://47.xxx.xxx.xx:3000/posts 这个地址,得到的结果也是连接网络时发生异常。然后我在服务器上修改了API服务的监听端口,将其改为了80端口,重新访问http://47.xxx.xxx.xx/posts。 我成功的获取到了数据。这说明了什么?这个锅就是阿里云!!!
进入阿里云的控制台,我看到了防火墙上对HTTP请求支持的端口只有80端口一个!!!
解决方案:
在阿里云服务器的防火墙新增一个3000端口,并且记得自己的服务器内部防火墙也要设置3000端口为tcp端口
具体服务器设置如下:
执行firewall-cmd --permanent --zone=public --add-port=3306/tcp
,如果提示FirewallD is not running
查看防火墙状态
通过systemctl status firewalld
查看firewalld
状态,发现当前是Active: inactive(dead--死的)
状态,即防火墙未开启。
通过systemctl start firewalld
开启防火墙,没有任何提示即开启成功。
再次通过systemctl status firewalld
查看firewalld状态,显示Active: active(running)
即已开启了。
再次执行执行firewall-cmd --permanent --zone=public --add-port=3306/tcp
,提示success
,表示设置成功,这样就可以了
这时我再次请求http://47.xxx.xxx.xx:3000/posts 我获取到了数据
forever
为了解决如果关闭服务器的控制台,就会导致应用停止的问题,通过安装forever来解决
Forever可以守护Node.js应用,客户端断开的情况下,应用也能正常工作。安装forever,需要加-g参数,因为forever要求安装到全局环境下:npm install forever -g
forever的使用方式:
# 启动
forever start ./bin/www #最简单的启动方式
forever start -l forever.log ./bin/www #指定forever日志输出文件,默认路径~/.forever
forever start -l forever.log -a ./bin/www #需要注意,如果第一次启动带日志输出文件,以后启动都需要加上 -a 参数,forever默认不覆盖原文件
forever start -o out.log -e err.log ./bin/www #指定node.js应用的控制台输出文件和错误信息输出文件
forever start -w ./bin/www #监听当前目录下文件改动,如有改动,立刻重启应用,不推荐的做法!如有日志文件,日志文件是频繁更改的
# 重启
forever restart ./bin/www #重启单个应用
forever restart [pid] #根据pid重启单个应用
forever restartall #重启所有应用
# 停止(和重启很类似)
forever stop ./bin/www #停止单个应用
forever stop [pid] #根据pid停止单个应用
forever stopall #停止所有应用
# 查看forever守护的应用列表
forever list