大家好,今天小编来为大家解答nodejs搭建本地服务器这个问题,如何用命令行开启nodejs搭建web服务器很多人还不知道,现在让我们一起来看看吧!
一、如何用nodejs搭建web服务器
使用Node.js搭建Web服务器是学习Node.js比较全面的入门教程,因为实现Web服务器需要用到几个比较重要的模块:模块、文件系统、url解析模块、路径解析模块、以及301重定向技术等,下面我们就一起来学习如何搭建一个简单的Web服务器。
作为一个Web服务器应具备以下几个功能:
1、能显示以.html/.htm结尾的Web页面
2、能打开以.js/.css/.json/.text结尾的文件内容
3、显示图片资源
4、自动以.apk/.docx/.zip结尾的文件
5、形如,则查找b目录下是否有index.html,如果有就显示,如果没有就列出该目录下的所有文件及文件夹,并可以进一步访问。
6、形如,则作301重定向到,这样可以解决内部资源引用错位的问题。
引入需要用到的几个模块:
//协议模块var= require('');//url解析模块varurl= require('url');//文件系统模块varfs= require("fs");//路径解析模块varpath= require("path");
创建服务并在指定的端口监听:
//创建一个服务varServer= .createServer(this.processRequest.bind(this));//在指定的端口监听服务Server.listen(port,function(){console.log("[HttpServer][Start]","runing at );console.timeEnd("[HttpServer][Start]");});
在创建服务的时候需要传递一个匿名函数processRequest对请求进行处理,processRequest接收2个参数,分别是request和response, request对象中包含了请求的所有内容,response是用来设置响应头以及对客户端做出响应操作。
processRequest:function(request,response){varhasExt=true;varrequestUrl= request.url;varpathName= url.parse(requestUrl).pathname;//对请求的路径进行解码,防止中文乱码pathName= decodeURI(pathName);//如果路径中没有扩展名if(path.extname(pathName)===''){//如果不是以/结尾的,加/并作301重定向if(pathName.charAt(pathName.length-1)!="/"){pathName+="/";varredirect="://"+request.headers.host+ pathName;response.writeHead(301,{location:redirect});response.end();return;}//添加默认的访问页面,但这个页面不一定存在,后面会处理pathName+="index.html";hasExt=false;//标记默认页面是程序自动添加的}//获取资源文件的相对路径varfilePath= path.join("/webroot",pathName);//获取对应文件的文档类型varcontentType=this.getContentType(filePath);//如果文件名存在fs.exists(filePath,function(exists){if(exists){response.writeHead(200,{"content-type":contentType});varstream= 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){//如果这个文件不是程序自动添加的,返回404response.writeHead(404,{"content-type":"text/html"});response.end("<h1>404 Not Found</h1>");}else{//如果文件是程序自动添加的且不存在,则表示用户希望访问的是该目录下的文件列表varhtml="<head><meta charset='utf-8'></head>";try{//用户访问目录varfiledir= filePath.substring(0,filePath.lastIndexOf('\\'));//获取用户访问路径下的文件列表varfiles= fs.readdirSync(filedir);//将访问路径下的所以文件一一列举出来,并添加超,以便用户进一步访问for(variinfiles){varfilename= files[i];html+="<div><a href='"+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:,
如果要运行demo,打开cmd切换到根目录,运行node start即可。
二、nodejs怎么启动服务
webstorm怎么启动nodejs的调试和服务器
1.安装:npminstall-gnode-inspector
2.启动debug模式(单独命令行):
node-debug(该命令默认8080端口)
node-debug--web-port1984(定义任意端口)
3.访问chromedebugdevTools
路径如:;port=5858
4.启动gulp或者grunt服务(具有gulp或者grunt任务时)
node--debug-brk$(whichgrunt)server(这种模式使用在第一次初始化执行的代码)
node--debug$(whichgrunt)server(这种模式使用在初始化之后监听的node代码)
如何用命令行开启nodejs搭建web服务器?
首先,需要安装nodejs,这个可以去官网,目前我本地安装的v0.12版本。
安装完成后可以通过命令行测试安装是否成功,输入:node-v,应该会显示当前安装node版本号。
本文中用到的模块,都是nodejs核心模块,不需要从外部,如果有需要,可以使用以下命令安装:npminstallxxx。
开始
下一步,新建js文件,可以命名为server.js,代码如下:
var=require('');
varurl=require('url');
varpath=require('path');
varfs=require('fs');
vardir,arg=process.argv[2]||'';//命令行第三个参数,用来接收目录,可为空,相对当前server.js文件的目录名称
//比如使用命令nodeserverdebug,意思就是debug文件夹与server.js文件同级
//且你想以debug文件夹启动web服务
.createServer(function(req,res){
varpathname=__dirname+url.parse(req.url).pathname;
[linux运维]?1、最新node.js二进制源码安装包(29MB),V8.2.1更新于2017年7月20日?
wget?-c?
wget是一个Linux文件的工具,centos自带。
wget?-c?是断点续传方式,后面的URL就是提供文件的
默认获取的文件在/root目录下,命令pwd显示当前目录.
??2、安装必要的编译软件?吖米yum?install?g?g-c++?yum?=?Yellow?dog?Updater,?Modified。改良黄狗更新器,centos自带智能包管理器。?中途询问,输入y:在线安装?d:只不安装?N:不不安装
Is?this?ok?[y/d/N]?:y
??3、解压源码tar?-zxvf?node-v8.2.1.tar.gz当前目录/root/就会多一个node-v8.2.1的文件夹-z:透过gzip的支持进行压缩/解压缩:此时文件名最好为*.tar.gz-x:解压缩的功能-v:在压缩/解压缩的过程中,将正在处理文件名显示出来
f?filename:-f后面要立刻接被处理的文件名.
??4、编译node源码包?1)进入到node源码包解压目录?cd?node-v8.2.1指定NodeJS安装位置./configure?--prefix=/usr/local/node?不指定prefix,则可执行文件默认放在/usr?/local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc。其它的资源文件放在/usr?/local/share。你要卸载这个程序,要么在原来的make目录下用一次make?uninstall(前提是make文件指定过uninstall),要么去上述目录里面把相关的文件一个个手工删掉。?执行安装文件,足足等了40多分钟
make??make?install
??4、添加环境变量???创建并打开新文件?不存在node.sh文件?[root@localhost?node-v8.1.3]#?vim?/etc/profile.d/node.sh??输入node安装位置的bin目录所在位置?export?PATH=$PATH:/usr/local/node/binESC?输入:wq?提示:?命令输入错了vim-bash:?rt:?mand?not?found-bash:?vim:?mand?not?found[解决]i.?那么如何安装?vim?呢?输入rpm?-qa|grep?vim?命令,?如果?vim?已经正确安装,会返回下面的三行代码:root@server1?[~]#?rpm?-qa|grep?vimvim-enhanced-7.0.109-7.el5vim-minimal-7.0.109-7.el5vim-mon-7.0.109-7.el5?如果少了其中的某一条,比如?vim-enhanced?的,就用命令?yum?-y?install?vim-enhanced?来安装:yum?-y?install?vim-enhanced?如果上面的三条一条都没有返回,?可以用?yum?-y?install?vim*?命令yum?-y?install?vim*
??使用su?root?source?/etc/profile.d/node.sh?=.?/etc/profile.d/node.sh?[不间断运行nodejs服务]?npm?install?forever?-g?forever?start?.js
nodejs服务后台持续运行三种方法
forever是一个nodejs守护进程,完全由命令行操控。forever会监控nodejs服务,并在服务挂掉后进行重启。
1、安装forever
npminstallforever-g
2、启动服务
serviceforeverstart
3、使用forever启动js文件
foreverstartindex.js
4、停止js文件
foreverstopindex.js
5、启动js文件并输出日志文件
foreverstart-lforever.log-oout.log-eerr.logindex.js
6、重启js文件
foreverrestartindex.js
7、查看正在运行的进程
foreverlist
pm2是一个进程管理工具,可以用它来管理你的node进程,并查看node进程的状态,当然也支持*能监控,进程守护,负载均衡等功能
npminstall-gpm2
pm2start.js??//启动
pm2start.js-imax?//启动使用所有CPU核心的集群
pm2stop.js???//停止
pm2stopall??????//停止所有
pm2restart.js??//重启
pm2restartall?????//重启所有
pm2delete?.js???//关闭
运行pm2startup,即在/etc/init.d/目录下生成pm2-root的启动脚本,且自动将pm2-root设为服务。
运行pm2s*e,会将当前pm2所运行的应用保存在/root/.pm2/dump.pm2下,当开机重启时,运行pm2-root服务脚本,并且到/root/.pm2/dump.pm2下读取应用并启动。
nodejs自带node.js自带服务nohub,不需要安装别的包。
缺点:存在无法查询日志等问题,关闭终端后服务也就关闭了,经测试是这样的。
nohupnode***.js
linux如何后台运行node服务?
在你的任意目录输入命令:npminstallpm2-g
1.找到全局环境PATH路径
输入命令:echo$PATH
回车后:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
你的路径和我的可能不一样,但没关系,你可以选择任何一个以:隔开的路径做为系统环境路径,我通常会选/usr/local/bin
2:找到pm2的安装路径
在上面输入npminstallpm2-g全局安装时
/usr/sbin/nodejs/bin/pm2-/usr/sbin/nodejs/lib/node_modules/pm2/bin/pm2
/usr/sbin/nodejs/bin/pm2是安装路径(你的可能和我的不一样)
3.好了都找到了,
就重要的一步要开始了,睁大你的双眼。
命令为:ln-s/usr/sbin/nodejs/bin/pm2/usr/local/bin/(注意空格)
格式:ln-s空格pm2安装路径空格系统环境路径
OK,搞定,接下来验证一把…
[root@iZmwyb7v60*1zZ~]#pm2list
回车...
$pm2start.js#启动.js应用程序
$pm2start.js–name=”api”#启动应用程序并命名为“api”
$pm2start.js–watch#当文件变化时自动重启应用
$pm2startscript.sh#启动bash脚本
$pm2list#列表PM2启动的所有的应用程序
$pm2monit#显示每个应用程序的CPU和内存占用情况
$pm2show[-name]#显示应用程序的所有信息
$pm2logs#显示所有应用程序的日志
$pm2logs[-name]#显示指定应用程序的日志
$pm2stopall#停止所有的应用程序
$pm2stop0#停止id为0的指定应用程序
$pm2restartall#重启所有应用
$pm2reloadall#重启clustermode下的所有应用
$pm2gracefulReloadall#Gracefulreloadallsinclustermode
$pm2deleteall#关闭并删除所有应用
$pm2delete0#删除指定应用id0
$pm2scaleapi10#把名字叫api的应用扩展到10个实例
$pm2reset[-name]#重置重启数量
$pm2startup#创建开机自启动命令
$pm2s*e#保存当前应用列表
$pm2resurrect#重新加载保存的应用列表
$pm2update#S*eprocesses,killPM2andrestoreprocesses
$pm2generate#Generateasamplejsonconfigurationfile
window下nodejs环境怎么配置
node.msi安装文件包,里面包含了node.js和npm;双击node.msi,选择安装路径和npm;
在node的安装的根目录,也就是nodejs文件夹下新建两个名字为node_cache、node_global文件夹
设置环境变量:变量名:NODE_PATH值:D:\ProgramFiles\nodejs\node_global\node_modules。注意:本教程nodejs安装在D:\ProgramFiles\目录下,所以环境变量就这样设置的;
找个项目文件夹,再里面新建一个service文件夹
注意:此路径不能有中文。再在里面新建一个UTF-8编码的js文件
在js文件里面增加入下代码
启动nodejs服务,window键+R,输入cmd然后回车
在黑窗口中输入nodeG:\nodejs\service\test.js
注意:结尾不用加分号;
回车看结果;
成功:
失败:
NodeJS在windows下怎么启动守护进程
使用Win系统中自带的wscript命令来创建守护进程。
下面是大致的步骤:
一、创建一个watch.vbs文件,只有一行内容:
请注意末尾的0,表示以隐藏模式运行,否则会产生一个CMD窗口。
二、主程序main.js:
实际上,上方最后一行代码中,wscript会确保vbs中启动的进程脱离终端控制。
三、最后,在CMD中nodemain,会发现任务管理器中有两个node.exe进程,关掉当前的CMD,进程列表中仍有个node.exe驻留着,它即守护进程。
三、如何用命令行开启nodejs搭建web服务器
首先,需要安装nodejs,这个可以去官网,目前我本地安装的v0.12版本。
安装完成后可以通过命令行测试安装是否成功,输入:node-v,应该会显示当前安装node版本号。
本文中用到的模块,都是nodejs核心模块,不需要从外部,如果有需要,可以使用以下命令安装:npm install xxx。
开始
下一步,新建js文件,可以命名为server.js,代码如下:
var = require('');
var url= require('url');
var path= require('path');
var fs= require('fs');
var dir, arg= process.argv[2]||'';//命令行第三个参数,用来接收目录,可为空,相对当前server.js文件的目录名称
//比如使用命令 node server debug,意思就是debug文件夹与server.js文件同级
//且你想以debug文件夹启动web服务
.createServer(function(req, res){
var pathname= __dirname+ url.parse(req.url).pathname;