本次总结几个点:
1.Node.js
2.http/路由
3.芒果数据库
4.express+node.js
5.socket/websocket/socketio
【此处声明:我用的编译器是Hbuilder 运行环境是win7系统 Node.js安装的最新版本 express等也是最新】
一.Node.js
为什么要学习node.js 因为可以辅助前端开发,代替后台开发
什么是Node.js?
(后端服务器语言,之前的js在客户端写数据,不能往服务器传输数据。Ps:适用于小的项目,大项目后台不适用)
Node.js是一个Javascript运行环境(runtime environment),发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进行了封装。Node.js对一些特殊用例进行优化,提供替代的API,使得V8在非浏览器环境下运行得更好。
V8引擎执行Javascript的速度非常快,性能非常好。 [1] Node.js是一个基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞I/O 模型而得以轻量和高效,非常适合在分布式设备上运行数据密集型的实时应用。
Node.js可以在不新增额外线程的....情况下,依然可以对任务进行并发处理 —— Node.js是单线程的。它通过事件轮询(event loop 重复调用判断操作是否完成)来实现并发操作,对此,我们应该要充分利用这一点 —— 尽可能的避免阻塞操作,取而代之,多使用非阻塞操作
什么是非阻塞I/O 模型?
非阻塞系统是指在不能立刻得到调用结果之前,函数不会阻塞当前线程,而会立刻返回的I/O系统。调用非阻塞I/O跟阻塞I/O的差别为调用之后立即返回,立即返回的是当前调用的状态。返回后,CPU的时间片可以用来处理其他事务,此时性能是提升的。
注意:node环境是不存在使用document.getElement之类的操作的,因为dg只存在于浏览器(客户端),是dom对象,而此处的环境是服务器
NPM是随同nodejs一起安装的包管理工具,常见命令 npm install,npm uninstall, update , list 等
package.json列出详细信息node的包 管理工具 当有了package.json 加上
install 安装,install -g 全局安装 install -dev 本地依赖 uninstall 卸载 list 列出详细信息
GitHub上有NW源码,用于搭建桌面应用程序,比如PC端微信
创建服务器
找到你的项目所在的文件夹,然后按住shift键,运行命令符,输入 npm init 随后的一系列命名都直接按回车键默认,然后安装npm install jquery --save-dev ,然后在编译器HB中写一个js文件server.js,内部代码如下
//引入http模块
const http = require("http");
http.createServer((req,res)=>{
res.writeHeader(200,{"content-type":"text/html;charset=utf-8"});
res.write("bbb");
res.end();
}).listen(8000,"127.0.0.1");
console.log("服务器已开启,地址为127.0.0.1:8000");
text/html 向网络中显示解析后的代码
text/plain 输入的内容为文本直接显示,不解析为代码
最后在命令运行窗口输入node server 回车
此时服务器就创建好了,测试时res.write( )输入什么就会在服务器显示什么,但是每次都需要重新运行一遍代码npm server 然后再刷新页面。这样是很麻烦的,所以我们要再加一个热更新,热更新就是可以不用重复执行node,自动更新内容并且刷新页面(supervisor)。好了,现在你彻底建好服务器了。
如果显示的是buff,如何从字符串显示成文字?用toString方法
关于nodejs的详细用法可以参考他的官方网站上的API接口文档,网上一搜就有,好吧我人好,给你链接。
http://nodejs.cn/api/url.html#url_url_parse_urlstring_parsequerystring_slashesdenotehost
tips:
在文件夹创建js文件,只能一个一个创建,但是可以用for循环实现多个文件的创建
安装和测试的时候可能会报各种你懵逼的错误,有的错误是标点符号的输入错误(平时敲代码认真一些,仔细一些避免可避免的错误,会省很多时间和精力去排错和重复工作),有的错误是配置环境时出现的不可预知的错误(这种没办法的,把之前装的东西删掉重新装就行了,我在以前配置gulp环境的时候,坚信自己没错,各种试图解决安装过程中的bug,事实证明是徒劳也没有必要。删掉重新装,有效还效率高)。基本上我遇到的错误就是这两类,如果你遇到什么别的bug,如果能分享给我,我非常感谢。
代码大概是这个世界上最忠贞又奇怪的事情,只要输入正确的指令,他就一辈子不变,但是有时又会出现不可预知的莫名其妙的错误,但是无论如何,要一直爱他
二. http/路由
一部分中咱们创建了服务器,在实际开发中仅仅有服务器显然是不够的,还要有登录注册,主页,商品列表页,购物车,关于我们等等这些功能性页面。如何实现页面之间带着用户信息的跳转呢,这就要看路由和Http的相关协议了,建议初学者好好查一些计算机的协议知识。
http的方法什么的,在nodejs的API文档里有,看了就知道怎么用了,大量实例都在里面,你也可以找一些接口自己串起来去用一下,
接口的实现思路,我在浏览器只能访问A服务器,但是需从B服务器获取资源,于是我让A服务器去B服务器搞资源,然后我就可以在A服务器上访问到资源了
路由:
路由模板
var http = require("http");
var router = require("./router.js");
//var url = require("url");
var server = http.createServer(function(req,res){
if(req.url != "/favicon.ico"){
var surl = req.url.slice(1);//url.parse(req.url).pathname.replace(/\//,"")
res.writeHead(200,{"content-type":"text/html;charset=utf-8","Access-Control-Allow-Origin":"*"});
try{
router[surl](req,res);
}catch(e){
router["404"](req,res);
}
//res.end();
}
});
server.listen(8000);
基本思路:
路由做一个判断,判断走页面路由还是页内路由,查询路由,ajax调接口后台取数据,
页面路由: login regist路径localhost:8000/regist 跳转
页内路由 :login-api regist-api路径,比如点注册后,localhost:8000/regist/abcd?=123,之类的表示某一个用户注册了,再去数据库查看是否已存在,返回1或者0,然后提示信息注册/登陆成功与否
注册成功就把数据转成字符串然后存数据库,再跳转到登陆
tips:
网上找到接口不一定可以用,因为没有jsonp的环境,只能看,无法操作。想操作要进行一些跨域
利用jsonp从后台跨域请求数据,因为异步先执行最后,所以有数据获取不到会报错,一开始报错无法跨域,调整一下res.end( )的位置,错误应该就可以解决,啊,这要看你的代码结构了,我理解学习的不够透彻,只能从我已知的部分给出解释,仅作参考。
路由学习网站
http://www.expressjs.com.cn/guide/routing.html
浏览器访问服务器,服务器返回
结合ajax,readfile读取文件
浏览器向网上的资源发出请求,获取资源,回调函数res ondata 给服务器,服务器给前端
三. 芒果数据库 mongodb
芒果数据库 这几年使用范围比较大,阿里巴巴,京东等。增删改查的操作相对而言比mysql简单
非关系型数据库
非关系型数据库
芒果数据库安装流程
1.双击exe安装文件
2.勾选同意选项,下一步,然后选择coustom,下一步,然后在D盘的根目录下建一个名为mgdb的文件夹,将安装路径改为D/mgdb
3.在D盘的根目录下建一个名为data的文件夹,再在data文件夹里建一个名为db的文件夹
4.进入mgdb文件夹 --->bin文件夹 ---->mongod.exe 双击运行不要关闭 ---->mongo.exe 双击运行不要关闭 以后运行芒果数据库也是这个顺序打开
5.在mongo.exe的运行环境中显示的url(127.0.0.1:27017),在浏览器打开,出现以下内容说明安装成功
It looks likes you are trying to access MongoDB over HTTP on the native driver port.
具体怎么用什么的,去看官网上的使用手册,网上啥都有,比如什么语法啊,如何链接nodejs啊,做测试挺有意思的,就是你得一直认真,稍微敲错一个逗号或者引号,那就得重新输入,没有复制粘贴
将用户注册的数据转化为字符串存在数据库
四. Node.js Express 框架
好像这个没啥好讲的,完整的安装教程什么的,照着一步步做就行,遇到安装中显示的代码跟你的安装不一样的,不要慌,那是nodejs版本不同的缘故,只要没报错,你就继续走流程就行。
下面这个也得安装和学习,因为他们都是搭配使用效果更好的,不知道什么时候开发可以一个软件就搞定,做个项目装一堆插件的,发愁。。。光配置环境都得等好久了
安装好了以后,创建一个新的项目,大概长这样
静态在 public 数据在routs html 在views
后缀变化而已,写的是html。HB中没有创建ejs文件,通过新建 --->自定义文件 写上后缀名ejs即可
五 socket 实时双工通讯 聊天的三种写法
了解一下 socket是什么东西
单工,半双工(a给b可以,b不能给a。消息传递结束后,b给a可以,a给b不行。该模式会被逐步淘汰),双工 三种通讯模式
pid在本地唯一,在网络上不唯一。所以传递信息 需要协议名加主机名(域名)加端口号
tcpip和http协议 查一堆协议 tcp 等等
http (应用层 和用户打交道的) 服务器被动接受信息,没有请求我就不响应
qq服务器,A给B发送信息,A发的先到服务器,服务器做出响应后发给B,此处B是没有任何请求的,但是有收到信息
node.js net模块
还是老话,具体语法看文档去
OA系统 钉钉
登录注册,发消息 不同客户端要求不同
不同的客户端怎么区别和获取他们说的话
开启新的一个客户端无需再写一个新的socketClient.js文件,在项目所在文件夹打开nodejs命令窗口再运行node socketClient 一个新的命令窗口 就是一个新的客户端了(好神奇=。=)两个不同的客户端之间可以实现互相聊天
每发送一句话,都要遍历一遍客户端,找出谁说话的。客户端代码
了解一下这个,第二种写实时通讯的方法。第三种是socketio也是网上一搜就有网站有教程,在此推荐一下,不做具体搬运