七月第一周总结

       【看知识点的跳过本段,往第二段看】本来想说是最近太忙了,所以原本计划的一周一次总结泡汤了,六月就写了一篇,转眼已经是七月了,惭愧惭愧。但是事实是一旦从事互联网行业,emmm,十有八九都是这样吧,晚上加班,哦,已经不能说是加班了,就是正常的企业文化就是十二点往后还在做东西,每天两点多睡觉,早上又要七点多起来上班去。。。工作不是人生最重要的事,健康才是。所以能休息的时候一定要休息,这是我想提醒给看到我这篇文章的人的良心建议。不然你生病以后,尤其是严重的大病,你会发现什么都是虚妄,只有你自己好好活着才是最重要的。《我不是药神》这是我前两天刚看的一部热映的电影,根据真实事件改编的,实实在在的病人买不起天价药,活生生等死的真事儿。健康的价值总是被人忽略,人们总是失去了才知道珍惜,但是还醒悟不过来。还有就是这周找房子搬家的事,整的我心力交瘁,房屋托管公司,呵呵,手动微笑,草泥马。

       本次总结几个点:

        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在客户端写数据,不能往服务器传输数据)
Node.js是一个Javascript 运行环境(ru ntime 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接口文档,网上一搜就有,好吧我人好,给你链接。

      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( )的位置,错误应该就可以解决,啊,这要看你的代码结构了,我理解学习的不够透彻,只能从我已知的部分给出解释,仅作参考。
路由学习网站


浏览器访问服务器,服务器返回
结合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也是网上一搜就有网站有教程,在此推荐一下,不做具体搬运


猜你喜欢

转载自blog.csdn.net/super_mestt/article/details/80957999