前端如何独立用nodeJs实现一个简单的注册、登陆功能,是否是只用nodejs+sql就能够了?实际上是能够实现,但离实际应用还有距离,那要怎么作才是实际可用的。javascript
网上有不少nodeJs的示例,包括和 sql / nginx … 等周边技术结合demo,但一般都是作为入门演示或解决某一问题,少有站在项目实际完整应用角度,给出一个总体的解决方案。一些前端朋友和我讨论nodejs时,也多表现出对服务端的欠缺,虽然知道nodejs很好,但难以实际应用。css
我在这块作了些研究,也在公司项目中有应用,在此和你们分享下,如何用nodejs实现一个实际可用的项目,须要操做的步骤及相关的技术应用。如今还没想好作怎样的一个demo,就随想随作,若有意义的需求咱们也能够一块儿实现下,如有欠缺,也欢迎共同讨论。html
第一次作,咱们就先实现下最经常使用的注册和登陆。前端
技术点:java
⋅⋅*因涉及到的技术点较多,在本项目中每一种技术如nginx只对使用到的部分作讲解,其它部分后面用到再讲,按部就班,基础较弱者也好逐步接受。node
⋅⋅*本节,咱们将实现unbuntu、nodejs、nginx的安装及初步使用,搭建一个可访问的服务linux
本次开发将linux上开发,建议前端开发者尝试使用linux系统,其能拓展技术面,在提高开发、发布效率等方面也有好处,初次使用linux会有些障碍,不过如今linux也有类win7的漂亮桌面环境,操做大体类似,在命令不熟时也能够正常使用,坚持用两周,是能够适应的。nginx
选择系统上建议安装适合我的开发者的ubuntu。git
建议安装双系统,虚拟机太弱,彻底安装ubuntu,使用又不便,有些软件如PS是不支持linux的。web
win7下安装ubuntu 的双系统,WIN7安装ubutntu 步骤参见 http://www.upopen.cn/article/info?id=559291b3f0e6e0665b000001
安装成功后,咱们就开始提升B格之旅,接下来会对用到的linux操做作简单解释,具体的ubuntu教程能够参考 http://www.upopen.cn/article/info?id=55938b7ff0e6e0665b000003
快捷键 Ctrl + Alt + T 打开shell终端,
一、打开Nodejs站点 https://nodejs.org/download/,下载linux下对应的.gz文件。也能够拷贝下载地址后,
在shell里执行 wget https://nodejs.org/dist/v0.12.5/node-v0.12.5-linux-x64.tar.gz。
解释:wget :下载后面路径指定的文件
二、下载后默认在Downloads文件里,咱们将压缩文件放Soft/node 目录里以便分类管理
shell执行 mkdir Soft // mkdir: 建立Soft文件夹
执行 cd Downloads //cd: 进入到 Downloads 下载文件目录
执行 cp node-v0.12.5-linux-x64.tar.gz /home/cc/Soft
//cp: 复制 node..gz到Soft目录下,注意cc是你的主机名,可经过pwd查看
执行cd //进入我的根目录
执行cd Soft/node
执行 tar -zxvf node-v0.12.5-linux-x64.tar.gz //tar -zxvf 解压
执行 mv node-v0.12.5-linux-x64.tar.gz node //mv : 修改文件夹名为node
执行sudo vi /etc/profile //打开环境变量配置文件
在最后写入
javascriptexport PATH="/home/cc/Soft/node/bin:$PATH" export NODE_PATH="/home/cc/Soft/node/lib/node_modules"
// 环境变量地址参见 node的 pwd
配置成功后重启
做用:重启后,可执行node -v查看是否安装成功。
解释:本部涉及到ubuntu的基本命令操做,都有简单的解释
目录结构
root:项目根目录
⋅⋅web:前端服务
⋅⋅static:静态服务
⋅⋅*server:后端服务
一、执行 mkdir -p root/web
做用:建立目录,全部项目都在root下,前端服务在web。建立成功后进入web文件夹 执行cd root/web
二、执行touch package.json
做用:建立 package.json文件,维护nodejs项目的依赖文件
解释:touch :建立文件
四、执行 vi package.json
做用:用系统的VI编辑器打开 package.json文件。用vi做大量的编辑工做是不适合的,咱们仍是用常规的编辑器,在桌面打开文件系统,进入咱们建立的root/web目录,使用系统默认的gedit编辑器打开package.json
五、经过gedit在package.json写入
javascript{ ⋅⋅"name": "myCoolNodejs ", ⋅⋅"version": "0.0.1", ⋅⋅"private": true, ⋅⋅"scripts": { ⋅⋅⋅"start": "node app.js" ⋅⋅}, ⋅⋅"dependencies": { //主要是这两处,设置引入模块,后面还会用到其它模块,另行添加 ⋅⋅⋅"express": "*", ⋅⋅⋅"ejs": "*" ⋅⋅} }
六、执行npm install
做用:下载package.json中dependencies 定义的引入模块
注意:有时限制于网络等因素npm install会安装不成功,可使用淘宝的npm镜像,执行 npm install -g cnpm --registry=https://registry.npm.taobao.org,安装cnpm,执行cnpm install 。使用同npm。
七、经过桌面打开 web文件夹,建立app.js,并写入基本配置
javascript/** * 引入依赖模块 */ var express = require( 'express' ), http = require( 'http' ), path = require( 'path' ); var app = express(), server = http.Server( app ); /** * 设置 */ app.set( 'port', process.env.PORT || 3000 ); //服务启动端口 app.set( 'views', __dirname + '/views' ); //视图文件 app.set( 'view engine', 'ejs' ); //页面引擎 app.use( '/', express.static( path.join( __dirname, 'assets' ))); //静态文件路径 app.get( '/', function( req, res ){ res.render( 'index.ejs' ); //请求跳转到 index.ejs文件 }) server.listen( app.get( 'port' ), function(){ //监听服务端口 console.log( 'root server listening on port ' + app.get( 'port' )); } ); server.on( 'close', function(){ console.log( 'close' ); } );
八、web目录下建立views文件夹,里面再建立index.ejs文件做为首页
九、打开index.ejs文件,并写入
javascript<!DOCTYPE html> <html> <head> <title>个人nodejs项目</title> </head> <body> <h1>个人nodejs项目</h1> <img src="/public/imgs/logo.png" /> <!-- 引用图片,是为测试后面配置静态服务器--> </body> </html>
做用:ejs语法同html,优点在于其能够引用一些命令,如接收服务服务端定义的数据、include模板等
十、在web目录下建立文件夹 assets/public/imgs,拷入logo.png 图片
十一、shell到web目录,执行 node app.js,在浏览器打开 127.0.0.1:3000,便可看到咱们在index.ejs里设置的内容,如图
十二、在root在建立 statc文件夹,做为静态服务资源,将目录web/assets/下的文件,复制到static里,下面nginx将设置静态文件代理到static服务器
一、shell执行sudo apt-get install nginx
做用:安装nginx服务器,nginx的使用可参见http://www.upopen.cn/article/info?id=559254e8b269230039000003
二、执行sudo vi /etc/nginx/sites-enabled/default
做用:因配置文件须要编辑的命令较少,咱们尝试经过vi 编辑 nginx的配置文件。vi命令操做参见http://www.upopen.cn/article/list?kind=ubuntu
在server里增长
javascriptlocation ~ \.(png|jpg|css|js|woff|ttf|less|gif)$ { root /home/jgc/root/static/; #配置以上面结尾的文件都指向到 /home/cc/root/static。注意/cc/修改成你的计算机名 } location / { proxy_pass http://mynodejs.com; #其它请求转向到 http://mynodejs.com; 该名称能够自定义 }
在server外面新增
javascriptupstream mynodejs.com { //此处名称与上面proxy_pass名称一致 server 127.0.0.1:3000; #建立集群,为分摊服务器压力,能够建立多个服务器,作负载均衡,若是咱们将web复制一份为web1,启动端口改成3001,将其启动后,此处能够再增长一条配置 server 127.0.0.1: 3001 # 这样访问即可随机指向3000 及 3001服务,分摊访问压力、下降服务宕机风险 }
三、在shell 执行 sudo /etc/init.d/nginx start
做用:启动nginx服务
四、此时访问127.0.0.1也打开了和 3000同样的页面,不一样在于其静态资源是从static文件夹获取的,能够经过删除web中的assets文件测试。咱们后续静态文件都在statc里编辑,发布时static和web放在不一样的服务器上,即实现了资源分离,为CDN作准备,
五、执行sudo vi /etc/hosts
做用:打开本地host映射文件,新增一条 127.0.0.1 www.mynodejs.com。保存后,浏览器访问 www.mynodejs.com。
本节咱们使用、开发了以下功能
一、ubuntu的安装和使用
二、nodejs的安装 及 模块安装
三、nodejs文件的简单配置和启动,项目目录的划分
四、nginx安装、简单配置 及 启动 [ 反向代理及集群 ]
若是你本来只是一个单纯写html/css/js的前端开发员,相信这节是能够学到至关多的新知识,下节,咱们将主要在nodejs及 mongo这一块,并按实际项目使用建立项目架构。
有不明或错误,欢迎加群讨论,谢谢。