nodeJs

来源:互联网 发布:黄岩哪里招深孔钻编程 编辑:程序博客网 时间:2024/06/03 16:41

一 NodeJS简介

NodeJS优缺点总结:

优点: 
1.以事件和异步为特点最成功的服务器解决方案

2.部署简单方便;命名注重约定(统一标准);项目所需的扩展,插件资源相对独立,不易冲突

3.事件驱动(根据系统当前出现的事件来调度资源)

4.异步编程(大部分语言都是同步执行,一个操作出问题会影响整个操作,有IO时必须等待其完成才能执行后面的操作,而js作为异步执行,当有IO时,不会光等它,会继续执行后面的操作,IO完成时,以事件来通知,进而执行其相关的操作;所以快!)

实现异步编程的方式: 
a.回调函数(操作完成之后调用,高耦合,程序流程复杂,不易维护,一事件只能绑定一个函数) 
b.事件监听(对事件进行监视,发生时进行某个操作,一个事件可以绑定多个函数,耦合度低,但程序流程会更复杂) 
c.发布/订阅模式(维护一个专门的注册机构,所以特定的事件发生时都通知注册机构,需要监听某个事件只需要像注册机构订阅即可)

5.高效与性能

单个操作没有优势,但通过资源调配和对IO操作的优化实现高效(对比如PHP对IO处理是开多线程(浪费))

6.单线程与多线程 
Node.js单进程 
为更好利用cpu资源,可以利用子进程和多进程 
子进程:child_process模块 
多进程:pm2等第三方工具

缺点:

1.大量采用匿名函数,使得抛出的异常不易阅读(也是js的大缺点之一,所以给匿名函数命名是很好的习惯,但做的人不多)

2.try/catch限于同步代码,使得异常捕获较复杂(如果是异步代码,就需要在异步代码内部(使用错误标志参数)进行捕获)

3.单线程(最大的好处是不存在不同线程之间的资源调度),最大的缺点在于可靠性,错误如果没有捕获将无能为力(解决:1.写代码时周全考虑到错误,测试时尽量百分百覆盖,模拟所有常见的错误。 2避免使用同步代码 3使用多进程工具,当一个进程出问题时不至于完全不能服务。4编写专门的代码检查进程是否正常运行,否则重启)

4.不适合CPU密集型的场景(遇此情况尽量用其他能很好利用多核资源的语言(或者编写node.js的C语言扩展))

5.回调代码影响阅读(异步代码难阅读的多,阅读代码对软件工程非常重要)

二 js全栈的最佳组合(MEAN Stack),

MEAN Stack,即:MongoDB+Express+AngularJS+NodeJS,足够满足目前大多数web应用的需求。

MongoDB:

使用js作为控制和操作语言,几乎不需要配置便可以运行,使用简单方便。

Express:强大的功能和可扩展性,web服务器的核心。

AngularJS:前端结构化框架,结合了MVC设计理念,可以向后端一样写前端代码。

NodeJS:前端工程师写后端的利器。

三 NodeJS常用技巧

1 node执行某js文件:

node somejs.js
  • 1
  • 1

2

NodeJS调试:

常用调试工具:

WebStorm 
nodemon 
pm2 
node-inspector 
Chrome Developer Tools

四 NodeJS常用模块

1 Node.js 文件系统模块

Node.js 提供一组类似 UNIX(POSIX)标准的文件操作API, 即文件系统模块(fs)。

Node.js 文件系统(fs 模块)模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync()。

异步的方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息(error)。

建议使用异步方法,比起同步,异步方法性能更高,速度更快,而且没有阻塞。

2. Google v8

3.网络功能

4.二进制数据

5.数据流

6.加密和解密

7.nodemon

nodemon 是一款非常实用的工具,用来监控 NodeJS 源代码的任何变化和自动重启你的服务器,这样我们只需要刷新页面就能看到你的改动。这里还有个一个工具 supervisor 也能实现同样的功能,但相比起来 nodemon 更加灵活轻量,内存占用更少。

建议在项目安装nodemon模块,然后用命令:

nodemon bin/www
  • 1
  • 1

取代node命令来执行node.js文件。

注意不要关闭或离开,一旦离开就会断开连接。可以另外开一个控制终端来输入命令进行其他操作(如curl等)。

五 MongoDB常用操作

MongoDB的优点(为什么使用MongoDB):

“宽松”的数据存储形式非常灵活,MongoDB不限制每个key对应的values的数目。比如一个博客系统,有的文章没有评论,则它的值就是一个空集,有的文章评论很多,也可以无限制地插入。更灵活的是,MongoDB不要求同一个集合(collection,相当于SQL的table)里面的不同document有相同的key,比如除了上述这种文档组织,有的文档所代表的文章可能没有likes这个项目,再比如有的文章可能有更多的项目,比如可能还有dislikes等等。这些不同的文档都可以灵活地存储在同一个集合下,而且查询起来也异常简单,因为都在一个文档里,不用进行各种跨文档查询。而这种MongoDB式的存储也方便了数据的维护,对于一篇博客文章来说,所有的相关数据都在这个document里面,不用去考虑一个数据操作需要involve多少个表格。

当然,除了上述的优点,MongoDB还有不少别的优势,比如:MongoDB的数据是用JSON(JavaScript Object Notation)存储的(就是上面的这种key-value的形式),而几乎所有的web应用都是基于Javascript的。因此,存储的数据和应用的数据的格式是高度一致的,不需经过转换。更多的优点可以查看:http://www.tutorialspoint.com/mongodb/mongodb_advantages.htm。

mongodb是文档型数据库,集合相当于关系型数据库的表,对象相当于关系型数据库的行

在后台启动mongodb服务:

  mongod --dbpath=/data/db --port=27017 --fork --logpath=var/log/mongd.log
  • 1
  • 1

日志记录在var/log/mongd.log。

2.退出mongodb服务:

#mongod --shutdown 或者 kill (forked process id)
  • 1
  • 1
  1. 命令行工具

本地:

$ mongo
  • 1
  • 1

特定ip和端口:

$ mongo ip:port
  • 1
  • 1

执行mongo命令后:

4.查看当前有哪些数据库:

> show dbs
  • 1
  • 1

5.使用某数据库(没有会创建,当在集合中加入数据后才算真正创建成功,对象也是,只有掺入数据后才算创建成功)

> use dbname
  • 1
  • 1

6.插入数据(无集合时会创建集合)

在use具体数据库后:

> db.objectsname.insert({"key1":"value1"})
  • 1
  • 1

mongodb图形化管理工具:

个人推荐使用Robomongo:https://robomongo.org/

原创粉丝点击