大家好,如果您还对node搭建服务器不太了解,没有关系,今天就由本站为大家分享node搭建服务器的知识,包括如何用nodejs搭建web服务器的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!
一、如何用命令行开启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;
二、nodejs云服务器搭建(nodejs写服务器)
使用云服务器搭建专属*客
首先,推荐一个免费的云服务器提供商,三丰云,有了云服务器,我们使用帆模ssh连接云服务器。
下面我们进入构建*客的第一步:安装Git和NodeJs,网上一堆教程,这里就不在赘述了。
第二步,安装Hexo:
npminstall-ghexo
?初始化Hexo:
cd/work/Hexo
hexoinit
第团岩三步,获取*客塌轿御主题:
gitclohemes/even
参考:
怎么在阿里云服务器里使用nodejs环境
首次登录云服务器,要先进行用户设置。
用户设置
首先用passwd命令修改超级管理员root密码。
1
$passwd
根据提示连续输入两次密码,很简单吧。
接着,要新建一个普通的管理账号并设置密码,用于日常的系统管理。
1
2
$useradduser1
$passwduser1
将用户添加进管理组,以便于统一管理管理员的权限。
1
$usermod-a-Gwheeluser1
设穗野置新用户的sudo权限。
1
$visudo
执行visudo命令实际上编辑的是/etc/sudoers文件。找到rootALL=(ALL:ALL)ALL这行,并下面添加一行
1
user1ALL=(ALL:ALL)ALL
保存退出,以后就可用用sudo命令执行管理操作了。
修改主机名
每台服务器都有自己的名字,一般web服务器会用网站的域名来做主机名。[用户名@主机名~]$
1
2
$hostname""
$vi/etc/sysconfig/work
HOSTNAME=
保存,并退出编辑,下次等登入服务器就能看到修改的主机名字了。
SSH配置
将ssh的端口22改掉,另外,禁止root通过ssh登录服务器,并允许新建的普通管理员登录。
1
$vi/etc/ssh/sshd_config
找到#Port22,去掉#并将22修改为1025到65536之间的没被用到的端口号。找到下面一行,并去掉注释符。
1
#PermitRootLoginyes
在配誉搏置文件里添加
1
AllowUsersuser1
保存后,退出文件编辑。重启sshd
1
$servicesshdrestart
下次登录,就要用新设定的端口号登录了。
1
$sshuser1@ip-pport
挂载数据盘
为数据盘建立*分区和普通分区,并挂载到系统。首先查看查看数据盘
1
$fdisk-l
确认数据盘为/dev/xvdb接着,对数据盘进行分区操作,
1
$fdisk-S56/dev/xvdb
输入m可以查看帮助。这里键入n新建第一个扩展分区,接着输入p建立立基本分区,输入要建立的分区号1,起始簇保持默认,结束簇的位置输入+2G(一般扩展分区的大小为内存的两倍)。然后,重复上面的步骤,将剩下的分为数据盘,注意庆族祥第二个分区的分区号为2。
格式化分区
1
2
$mkswap/dev/xvdb1
$mkfs.ext4/dev/xvdb2
启用swap分区
1
$swapon/dev/xvdb1
将数据盘的第二个分区,挂载到新建的/data目录。
1
$mkdir/data
修改fstab文件,保证重启系统后自动挂载。
1
$vi/etc/fstab
添加
1
2
/dev/xvdb1swapswapdefaults00
/dev/xvdb2/dataext4defaults00
保存文件,并退出编辑,下次启动系统就能自动挂载数据盘了。
执行挂载命令,可以立即看到挂载的硬盘。
1
$mount-a
软件安装NginxMongoNode
我习惯于多个node进程共享80端口,用nginx反向代理到不同的node服务上去。安装nginx。新建yum仓库配置文件。
1
$vi/etc/yum.repos.d/nginx.repo
内容如下:
1
2
3
4
5
[nginx]
name=nginxrepo
baseurl=
gpgcheck=0
enabled=1
保存文件,并退出编辑。
执行.
1
$yuminstallnginx
安装mongodb
1
$vi/etc/yum.repos.d/mongodb.repo
文件内容
1
2
3
4
5
[mongodb]
name=MongoDBRepository
baseurl=
gpgcheck=0
enabled=1
保存文件,并退出编辑。
执行
1
$yuminstallmongodb-
安装Node和NPM
1
$sudoyuminstallnodejsnpm
至此,服务器环境就搭建好了。
如何在服务器上搭建nodejs
先确认下系统环境合不合要求
Python-V(确认python版本大于2.6)
访问需要的Node.js版本(wget
)
解压tarzxvfnode-v0.10.26-linux-x64.tar.gz
进入目录cdnode-v0.10.26-linux-x64
./configure--prefix=/home/work/setups/node-v0.10.26
make
sudomakeinstall
添加到系键知迅统环境echo"exportPATH=$PATH:/home/work/setups/node-v0.10.26/bin"猛没
~/.bash_profile
.~/.bash_profile执行该文件更新$PATH变量
###安装Express
sudonpminstallexpress
-gdg参数:把express安装到NodeJS的lib目录d参数:同时安装依赖模块包
sudonpminstallforever-gd
(异常情况:
如果遇到npm找不到的情况确认sudonode-v是否找不到找不到的话:需要added/usr/local/bintosecure_pathin/etc/sudoers:
sudovisudo
把Defaultssecure_path=
/sbin:/bin:/usr/sbin:/usr/bin这行改为Defaultssecure_path=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin然后:x保存退出
如果遇到
npmERR!Error:Hostname/IPdoesn'tmatchcertificate'saltnames
执稿此行npmconfigsetstrict-sslfalse
如果遇到npmERR!registryerrorparsingjson
npmcacheclean
执行npmconfigsetregistry
)
###部署forever
$npminstall-gforever
启动
NODE_ENV=proLANG='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启动文件
如何用命令行开启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搭建web服务器就是这么简单!
Node.js是一个基于ChromeV8引擎的J*aScript运行环境。Node.js使用了一个事件驱动、非阻塞式I/O的模型,使其轻量又高效。Node.js的包管理器npm,是全球最大的开源库生态系统。(nodejs官网上的介绍),正如官网上介绍的那样,nodejs确实很牛!怎么个牛法?看看下面的代码就知道了。
//引入模块
var=require("");
//设置主机名
varhostName='127.0.0.1';
//设置端口
varport=8080;
//创建服务
varserver=.createServer(function(req,res){
res.setHeader('Content-Type','text/plain');
res.end("hellonodejs");
});
server.listen(port,hostName,function(){
console.log(`服务器运行在{hostName}:${port}`);
});
短短几行代码就把一个简单的web服务器搭建完成了,为了验证效果,我们在浏览器请求,结果如下
运行成功!
到此为止,一个web服务器就建立成功了!没错就是这么简单,然后我们就可以写个html界桥散面愉快的玩耍了,哈哈哈!果断的写了一个html页面来请求一下我们的web服务器。
代码简单,p获取数据并将服务器返回的数据展示。好了,我们运行一下demo.html文件,我擦来!居然出现了……
很明显,通过jquery请求不到数据,这是因为跨域请求的原因。我们的web服务器并不支持跨域请求,所以报错了。解决方式:在服务器的响应头文件里加上如下代码:
再次重启服务器,运行demo.html,显示结果很是令人欣喜!
通常请求服务器都会拼接参数的,最常用的就是get请求,post请求。很明显,我们现在的代码还不能支持。express框架很好的封装了nodejs的模块,使我们用起来非常的简单。
引入express:$pminstallexpress–s*e
使用方式变化不大,通过express()方法开启服务,然后在通过get方法来设置匹配参数的路由,通过在回调函数的req中可以获取请求参数和。post请求也是类似,不过有不同的是,post请求在获取参数的时候要引入body-parser中间件,用于处理JSON,Raw,Text和URL编码的数据。
运行结果:
完整的get以及post请求就是以上了。下一篇文章会结果fs文件敏雀氏模块介绍是如何返回文件的,敬请期待!!
学习从来不是一个人的事情,要有个相互监督的伙伴,想要学习或交流前端问题的小伙伴可以私信“学习”小明加群获取2019web前端最新入门资料,一岁亮起学习,一起成长!
三、如何用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即可。