无法连接到本地服务器中用Nodejs问题,怎么解决
搭建nodejs服务器步骤:
1安装nodejs服务(从官网下载安装),node相当于apache服务器
2在自己定义的目录下新建服务器文件如 serverjs
例如,我在E:\PhpProject\html5\websocket下创建了serverjs文件
var http = require('http');//引入http模块//开启服务,监听8888端口//端口号最好为6000以上var server = httpcreateServer(function(req,res){
/
req用来接受客户端数据
res用来向客户端发送服务器数据
/
consolelog('有客户端连接');//创建连接成功显示在后台
//一参是http请求状态,200连接成功
//连接成功后向客户端写入头信息
reswriteHeader(200,{ 'content-type' : 'text/html;charset="utf-8"'
});
reswrite('这是正文部分');//显示给客户端
resend();
})listen(8888);
consolelog('服务器开启成功');123456789101112131415161718192021222324
3在cmd控制台中cd切换进serverjs所在的目录,然后执行node serverjs命令
当控制台显示”服务器开启成功”则说明node服务器已经建立
4在浏览器中访问服务器
在浏览器中输入
localhost:8888 , 浏览器显示“这是正文部分”。
查看cmd控制台,显示 “有客户端连接”
可在多个浏览器窗口中进行以上操作,每个浏览器窗口均会对应一次“有客户端连接”
以上步骤完成,node服务搭建完毕。下面是如何通过搭建的node服务访问本地站点的 text/html文本文件
访问本地站点文件
1在自定义的目录下创建node服务文件server2js
var http = require('http');var fs = require('fs');//引入文件读取模块var documentRoot = 'E:/PhpProject/html5/websocket/www';//需要访问的文件的存放目录var server= httpcreateServer(function(req,res){
var url = requrl;
//客户端输入的url,例如如果输入localhost:8888/indexhtml
//那么这里的url == /indexhtml
var file = documentRoot + url;
consolelog(url); //E:/PhpProject/html5/websocket/www/indexhtml
fsreadFile( file , function(err,data){
/
一参为文件路径
二参为回调函数
回调函数的一参为读取错误返回的信息,返回空就没有错误
二参为读取成功返回的文本内容
/
if(err){
reswriteHeader(404,{ 'content-type' : 'text/html;charset="utf-8"'
});
reswrite('<h1>404错误</h1><p>你要找的页面不存在</p>');
resend();
}else{
reswriteHeader(200,{ 'content-type' : 'text/html;charset="utf-8"'
});
reswrite(data);//将indexhtml显示在客户端
resend();
}
});
})listen(8888);
consolelog('服务器开启成功');12345678910111213141516171819202122232425262728293031323334353637383940414243444546
2创建indexhtml文件
如果要访问indexhtml文件,当然你得先有这个文件,不然服务器读取失败,返回40412
3在cmd控制台cd切换到 server2js的目录下执行node server2js命令
开启服务器
4在浏览器输入localhost:8888/indexhtml访问 该文件
nodejs其实是非常底层的,从功能上说,它既是apache也是php。像搭建http服务器这种功能,本来是apache已经封装好的,但nodejs需要我们手动来搭建。其实在实际应用中,我们可以使用现成的框架。但这里,我想手动搭建,也加深一下对http服务器的理解。
我们node执行下面这个文件,我命名为httpjs,它将创建一个httpServer并监听3000端口。
由于自身特性的原因。node程序必须保持开启才能访问网站,而当我们关闭SSH时这些进程都会被停止。有以下3种方法可以避免这个问题。
screen
Screen,虚拟终端管理器。可以在后台管理终端界面,防止SSH断开以后任务停止运行。
安装方法:
sudo apt-get screen (以ubuntu为例)
使用方法:
使用screen -S [任意id]命令进入一个名为id的终端,此时便可以随意执行操作
例如执行sudo apt-get upgrade,或者其它消耗时间比较长的工作,像编译内核等等。
按ctrl+a后再按d保存虚拟终端,系统提示deatached即为保存成功
接下来可以断开SSH终端,虚拟终端仍会执行。
访问已经创建好的终端
screen -ls 列出已经创建的正在后台运行的终端
screen -r xxx 进入终端
例如 screen -r terminal1
彻底退出
screen -r 进入终端后执行exit即可完全退出
PM2
pm2 是一个带有负载均衡功能的Node应用的进程管理器当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永远都活着
安装方法
npm install -g pm2
使用方法
启动应用 pm2 start -watch appjs
重启应用 pm2 restart appjs
显示进程列表 pm2 list
停止某应用 pm2 stop app_name|app_id
停止所有应用 pm2 stop all
小白方案
个人目前用的是宝塔Linux面板,可以说是把Linux的各种操作都已比较简单的形式展现出来了,不需要什么Linux知识就能掌握 宝塔官网了解一下
而这其中内置了PM2管理,装一下就OK了
好几种方案,用nginx、apache做前级分发,node服务启动在不同的端口(tcp端口orUnixsocket),很方便,nginx占80端口即可,可以方便接入各种不同的web服务(php、java)node内建服务来实现分发,原理和上面类似,只不过前级有node来占80端口。http请求产生的request对象会带有host信息,根据自己的需求,对host做一个路由,就可以实现不同的虚拟机了。
解决跨域的方法有:JSONP方式解决跨域、CORS方式解决跨域、搭建Node代理服务器解决跨域、Nginx反向代理解决跨域、postMessage方式解决跨域、Websocket方式解决跨域等。
1、JSONP方式解决跨域
jsonp的原理就是利用了script标签不受浏览器同源策略的限制,然后和后端一起配合来解决跨域问题的。
2、CORS方式解决跨域
cors是跨域资源共享,是一种基于HTTP头的机制,该机制通过允许服务器标示除了它自己以外的其他origin(域,协议和端口),使得浏览器允许这些origin访问加载自己的资源。服务端设置了Access-Control-Allow-Origin就开启了CORS,所以这种方式只要后端实现了CORS,就解决跨域问题,前端不需要配置。
3、搭建Node代理服务器解决跨域
因为同源策略是浏览器限制的,所以服务端请求服务器是不受浏览器同源策略的限制的,因此可以搭建一个node服务器来代理访问服务器。
4、Nginx反向代理解决跨域
nginx通过反向代理解决跨域也是利用了服务器请求服务器不受浏览器同源策略的限制实现的。客户端请求nginx服务器,在nginxconf配置文件中配置server监听客户端的请求,然后把location匹配的路径代理到真实的服务器,服务器处理请求后返回数据,nginx再把数据给客户端返回。
5、postMessage方式解决跨域
windowpostMessage()方法可以安全地实现跨源通信,此方法一种受控机制来规避此限制,只要正确的使用,这种方法就很安全。
6、Websocket方式解决跨域
使用Websocket也可以解决跨域问题,因为WebSocket本身不存在跨域问题,所以我们可以利用webSocket来进行非同源之间的通信,WebSocket规范定义了一个在Web浏览器和服务器之间建立“套接字”连接的API。简单来说:客户端和服务器之间存在持久连接,双方可以随时开始发送数据。
可以的,先在联网的机器上用npm install anywhere安装,然后到C盘当前用户的appdata下找Roaming/npm目录,你就能看到anywhere相关的几个包了,把它拷贝到内网相同的目录下,anywhere就能运行了
0条评论