1、nodejs当web服务器行不行
可以呀
使用Node.js搭建Web服务器是学习Node.js比较全面的入门教程,因为实现Web服务器需要用到几个比较重要的模块:http模块、文件系统、url解析模块、路径解析模块、以及301重定向技术等,下面我们就一起来学习如何搭建一个简单的Web服务器。
作为一个Web服务器应具备以下几个功能:
1、能显示以.html/.htm结尾的Web页面
2、能直接打开以.js/.css/.json/.text结尾的文件内容
3、显示图片资源
4、自动下载以.apk/.docx/.zip结尾的文件
5、形如http://xxx.com/a/b/ , 则查找b目录下是否有index.html,如果有就显示,如果没有就列出该目录下的所有文件及文件夹,并可以进一步访问。
6、形如http://xxx.com/a/b, 则作301重定向到http://xxx.com/a/b/ , 这样可以解决内部资源引用错位的问题。
引入需要用到的几个模块:
创建服务并在指定的端口监听:
在创建服务的时候需要传递一个匿名函数processRequest 对请求进行处理,processRequest接收2个参数,分别是request和response, request对象中包含了请求的所有内容,response是用来设置响应头以及对客户端做出响应操作。
processRequest:function(request,response){ var hasExt = true; var requestUrl = request.url; var pathName = url.parse(requestUrl).pathname; //对请求的路径进行解码,防止中文乱码 pathName = decodeURI(pathName); //如果路径中没有扩展名 if(path.extname(pathName) === ''){ //如果不是以/结尾的,加/并作301重定向 if (pathName.charAt(pathName.length-1) != "/"){ pathName += "/"; var redirect = "http://"+request.headers.host + pathName; response.writeHead(301, { location:redirect }); response.end(); return ; } //添加默认的访问页面,但这个页面不一定存在,后面会处理 pathName += "index.html"; hasExt = false; //标记默认页面是程序自动添加的 } //获取资源文件的相对路径 var filePath = path.join("http/webroot",pathName); //获取对应文件的文档类型 var contentType = this.getContentType(filePath); //如果文件名存在 fs.exists(filePath,function(exists){ if(exists){ response.writeHead(200, {"content-type":contentType}); var stream = fs.createReadStream(filePath,{flags:"r",encoding:null}); stream.on("error", function() { response.writeHead(500,{"content-type": "text/html"}); response.end("<h1>500 Server Error</h1>"); }); //返回文件内容 stream.pipe(response); }else { //文件名不存在的情况 if(hasExt){ //如果这个文件不是程序自动添加的,直接返回404 response.writeHead(404, {"content-type": "text/html"}); response.end("<h1>404 Not Found</h1>"); }else { //如果文件是程序自动添加的且不存在,则表示用户希望访问的是该目录下的文件列表 var html = "<head><meta charset='utf-8'></head>"; try{ //用户访问目录 var filedir = filePath.substring(0,filePath.lastIndexOf('')); //获取用户访问路径下的文件列表 var files = fs.readdirSync(filedir); //将访问路径下的所以文件一一列举出来,并添加超链接,以便用户进一步访问 for(var i in files){ var filename = files[i]; html += "<div><ahref='"+filename+"'>"+filename+"</a></div>"; } }catch (e){ html += "<h1>您访问的目录不存在</h1>" } response.writeHead(200, {"content-type": "text/html"}); response.end(html); } } });}请求处理函数中有几个重点需要说一下:
对于路径中有中文的,浏览器会自动进行编码(英文不变,中文会变),因此在接收到地址后,需要对地址进行解码,否则最后得到的路径和真实路径不相符,
当访问路径不是以具体的文件结尾,并且不是以/结尾,则需要通过重定向加上/,表示当前目录,否则当前路径下的静态资源会找不到
如果访问路径是目录,则列出该目录下所有文件及文件夹,并可以点击访问,为了让中文目录能正常显示,则还要在header中设置charset=utf-8
核心代码就这么多,大概140行左右,完整的代码已上传到github:https://github.com/git-onepixel/Node,
如果要运行demo,打开cmd切换到根目录,运行node start 即可。
2、如何用用命令行开启nodejs搭建web服务器
您好 很高兴为您解答:
这个web服务器包括三块,app.js是程序入口,负责响应url请求;route.js是路由,用来分发处理复杂的业务逻辑;system.js是配置文件,用来配置服务器参数,如host、port等
首先来看app.js,引用模块,http处理url请求,url用来解析请求参数和路径,path只是用来匹配路径的扩展名o(╯□╰)o,fs用来读取本地静态文件,剩下两个模块后面详解。
接下来正式创建服务器处理请求,请求大致分两类,一类是静态文件,如xxx.html、xxx.js等等,另一类是进行业务处理,如常见的增删查改操作,这一部分操作交给路由处理,这里用了一个简单的判断逻辑:通过后缀名,后缀名在system.js中配置。
读取本地文件的时候要注意一点,那就是缓存。如果客户端发出重复请求,服务器需要判断文件自上次请求后是否发生了修改,如果未修改返回304,这样可以加快浏览器端的响应速度。这里的判断方式是通过判断请求的header的if-modified-since时间和本地文件修改时间是否一致,如果一致则返回304,否则重置该时间,第一张图是代码,第二张图是通过chrome调试工具看到的请求头部时间。
如果需要进行业务处理,则交给路由处理了。首先路由引入具体的业务逻辑模块,然后通过解析具体的路径名来执行具体的业务逻辑,这里注意的是:由于node.js的并发特性,记得传入回调函数来获得相应的处理结果。
望采纳 谢谢
3、服务器部署nodejs的几种方法
由于自身特性的原因。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 app.js
重启应用 pm2 restart app.js
显示进程列表 pm2 list
停止某应用 pm2 stop app_name|app_id
停止所有应用 pm2 stop all
小白方案
个人目前用的是宝塔Linux面板,可以说是把Linux的各种操作都已比较简单的形式展现出来了,不需要什么Linux知识就能掌握 宝塔官网了解一下
而这其中内置了PM2管理,装一下就OK了
4、如何使用nodejs搭建服务器
方法/步骤
1如果电脑没有安装nodejs的同学可以先到node官方下载并安装好node程序。
安装好nodejs后验证一下是否安装成功!如果出现则表明node已经承装安装上去了!
2安装好node之后打开cmd 输入 npm install anywhere -g 安装anywhere ,然后等待直到出现以下界面。
3以上两个步骤都就绪以后,万事俱备,只欠东风啦!在cmd页面 找到你想搭建服务器的路径,然后再当前路径下输入: anywhere 8860
然后浏览器就自动打开本地访问网址,一个简单的node服务器就这样被我们搭建好啦!
http://jingyan.baidu.com/article/19020a0a02ff67529c28425f.html
5、nodejs 如何部署到服务器上?
两点:第一是否是线上服务,第二是否需要守护进程;
第一点,如果是线上服务,毫无疑问需要一个守护进程来保证,发生意外导致进程退出后,能重新启动,提供服务;当然就需要pm2等守护进程来启动,使用方法请自行参照github;第二点,是否需要守护进程,如果不需要,那么直接node启动即可;如果需要,也不必担心pm2启动进程后并不会抢占服务器资源,如果你的server有很大的需求,毋庸置疑需要更多的内存和cpu,如果没有很大需求,pm2会基于linux的资源调度策略,并不会抢占;
6、如何停止本地运行的nodejs服务器?
停止方法:
1.首先,不能共享完毕之后,都通过Ctrl+C来关闭NodeJS服务器。
2.其次,如果仅仅能向客户端提供d:ilinkit_logo.png文件的下载,是没有意义的,共享哪个文件,应该可以通过传入的参数来指定。我们首先来实现退出功能,如果客户端向服务器提交了http://localhost:8000/exit的请求,我们就执行服务器的退出操作。
代码如下:
1 var http = require( 'http' );
2 var fs = require('fs');
3 var url = require( 'url' );
4 (空行)
5 var file_path = "D:ilinkit_logo.png" ;
6 var file_stream ;
7 var buffer_box = [] ;
8 var file_length = 0 ;
9 (空行)
10 var file_name = file_path.substr( file_path.lastIndexOf('')+1 );
关键的代码解析如下:
第33行,我们通过request对象获取客户端请求的主机及端口内容。
第46行~第50行,我们判断客户端提交的请求信息,如果是http://localhost:8000/exit,则调用server.close()关闭服务器。为什么要判断是不是localhost提交的请求?因为我们希望仅仅在服务器本地提交的请求才能关闭NodeJS服务器。
验证方式如下:
1. 启动服务器:打开命令行,进入js脚本所在的位置,执行:node h_ilinkit_1.js。
2. 打开浏览器,输入:http://localhost:8000,显示如下:
说明当前服务器启动正常。
3. 打开浏览器,输入:http://localhost:8000/exit。
提示NodeJS服务器已经关闭,我们把浏览器关闭之后,发现服务器已经正常退出,如下所示。
这样,我们就没必要每次为了退出服务器,都去按Ctrl + C了。
7、nodejs怎么部署到服务器上
服务器推荐用nginx,配置简单,性能强悍。
nginx可以使用代理访问后端的Node.js应用服务器。
配置方法:
1)在配置文件http段内容添加后端服务器:
http {
#添加后端服务器,和nginx负载均衡配置一样
upstream nodejs {
server 127.0.0.1:8080;
}
...
}
2)给应用添加虚拟主机:
server {
listen 80;
server_nameIP
location / {
proxy_pass nodejs;#名字和前面的对应,将所有的请求转发给后端的node
}
access_log logs/nodejs.access.log main;#如果需要日志的话
}
推荐将静态文件如css、js和图片和应用服务器分开。
8、nodejs怎么实现服务器与服务器
var http = require("http"); var url = require("url"); http.createServer(function (req, res) { var urlObj = url.parse(req.url, true); // 获取中国 URL var urlToProxy = urlObj.query.url; if (!urlToProxy) { res.statusCode = 四00; res.end("URL 必须"); } else { console.log("处理中国请求:" + urlToProxy); var parsedUrl = url.parse(urlToProxy); var opt = { host : parsedUrl.hostname, port : parsedUrl.port || 吧0, path : (parsedUrl.pathname || "") + (parsedUrl.search || "") + (parsedUrl.hash || "") }; http.get(opt, function(pres) { // 请求中国 URL 内容 res.statusCode = pres.statusCode; var headers = pres.headers; for (var key in headers) { res.setHeader(key, headers[key]); } pres.on("data", function(chunk) { res.write(chunk); // 写数据 }); pres.on("end", function() { res.end(); }); }); } }).listen(吧0吧吧, "一二漆.0.0.一"); console.log("中国服务器已经 吧0吧吧 端口启"); 整中国服务器实现比较简单首先通 http 模块 createServer() 用创建 HTTP 服务器再通 listen() 让该 HTTP 服务器特定端口监听 createServer() 传入参数 HTTP 请求响应实际每 HTTP 请求都应于 HTTP 服务器 request 事
9、如何配置nodejs服务器环境
小鸟云服务器niaoyun实例创建好之后,您可以使用以下任意一种方式登录服务器:
远程桌面连接版(,MSTSC):采用这种权方式登录,请确保实例能访问公网。如果在创建实例时没有购买带宽,则不能使用远程桌面连接。
管理终端VNC:无论您在创建实例时是否购买了带宽,只要您本地有网页浏览器,都可以通过管理控制台的管理终端登录实例。
使用远程桌面连接(MSTSC)登录实例
打开开始菜单>远程桌面连接,或在开始菜单>搜索中输入mstsc。也可以使用快捷键Win+R来启动运行窗口,输入mstsc后回车启动远程桌面连接。
在远程桌面连接对话框中,输入实例的公网IP地址。单击显示选项。
输入用户名,如小鸟云默认为niaoyun。单击允许我保存凭据,然后单击连接。这样以后登录就不需要手动输入密码了。
10、如何在服务器上搭建nodejs
先确认下系统环境合不合要求
Python -V(确认python版本大于2.6)
访问http://nodejs.org/download/下载需要的Node.js版本(wget
http://nodejs.org/dist/v0.10.26/node-v0.10.29.tar.gz )
解压 tar zxvf node-v0.10.26-linux-x64.tar.gz
进入目录 cd node-v0.10.26-linux-x64
./configure --prefix=/home/work/setups/node-v0.10.26
make
sudo make install
添加到系统环境 echo "export PATH=$PATH:/home/work/setups/node-v0.10.26/bin">>
~/.bash_profile
. ~/.bash_profile执行该文件更新$PATH变量
###安装Express
sudo npm install express
-gd g参数:把express安装到NodeJS的lib目录d参数:同时安装依赖模块包
sudo npm install forever -gd
(异常情况:
如果遇到npm 找不到的情况 确认sudo node -v是否找不到 找不到的话:需要added /usr/local/bin to secure_path in /etc/sudoers :
sudo visudo
把 Defaults secure_path =
/sbin:/bin:/usr/sbin:/usr/bin 这行 改为 Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin然后:x保存退出
如果遇到
npm ERR! Error: Hostname/IP doesn't match certificate's altnames
执行 npm config set strict-ssl false
如果遇到 npm ERR! registry error parsing json
npm cache clean
执行 npm config set registry http://registry.npmjs.eu/
)
###部署forever
$ npm install -g forever
启动
NODE_ENV=pro LANG='zh' /usr/local/bin/foreverstart-o
/home/work/log/node_out.log-e /home/work/log/node_err.log /home/work/webroot/index.js
NODE_ENV=pro 环境变量 pro为生产环境(程序中可以指定)
LANG 环境变量 指定默认语言
node_out.log 输出日志 注意路径别抄成我的了
node_err.log 错误日志
index.js 启动文件