node学习笔记<进阶系列>

来源:互联网 发布:生化奇兵3:无限知乎 编辑:程序博客网 时间:2024/05/16 04:01

1.1. mongoDB访问

u  MongoDB 原生驱动

Christian Kvaleim 编 写 的 原 生 MongoDB 驱 动(https://github.com/christkv/node-mongodb-native) 提供了访问 MongoDB 的非阻塞方式。之前的版本提供了 C/C++ 的BSON 解析器和序列化功能,但因为 JavaScript 版本的性能提高,所以这套老的模块被弃用了。原生 MongoDB 驱动的好处是,你可以用来精确地控制 MongoDB 连接的操作。

u  Mongoose

Node使用Mongoose库能够支持大量的Mongo操 作。与原生的驱动相比,Mongoose 是一个表达更加清楚的环境,让模型和架构更加直观。项目主页(http://mongoosejs.com)


 

1.2. 连接池

连接池在 Web 开发中是非常重要的概念,因为建立一个数据库连接的开销相对来说还是很大的。为每个请求创建一个甚至多个连接会对高流量网站造成不必要的额外负担,也会导致性能下降。解决方案是在内部缓存池里维护数据库连接,当某连接不再需要时,它会被放回连接池里,这样就能立刻为下一个进入的请求服务了。许多数据库驱动提供了连接池功能,但该模式违反了 Node 的“一个模块,一个功能”的理念。所以,Node 开发者在数据层之上应使用通用的连接池(generic-pool)模块来进行数据库连接服务。generic-pool 模块会重用已有的连接,尽可能地防止因为创建新的数据库连接而带来的开销,而且这个模块可以用在任何数据库上。


 

1.3. Express框架

Express(Node的MVC 框架)也许是使用最广泛的Node 模块了,它吸取了 Ruby

的 Sinatra 框架的精髓,并提供了许多功能,使得用 Node 构建网站变得非常简单。

npm提供了大量的第三方模块,其中不乏许多Web框架,我们没有必要重复发明轮子,因而选择使用Express作为开发框架,目前最稳定且唯一一个Web开发框架。

http://www.expressjs.com.cn/

提供更高层的接口外,还实现了许多功能,如下:

路由控制

模版解析支持

动态视图

用户会话

CSRF保护

静态文件服务

错误控制器

访问日志

缓存

插件支持

u  工程结构

u  中间件

u  路由控制

u  模板引擎


 

1.4. KOA

http://koa.bootcss.com/

http://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/001434501579966ab03decb0dd246e1a6799dd653a15e1b000


 

1.5. web-dev-server

安装开发调试工具,它是一个基于Express的Node.js服务器,能够完成自动触发;

$npm i –g webpack-dev-server

$npm install webpack-dev-server --save-dev

webpack-dev-server 提供了两种模式用于自动刷新页面:

n  iframe 模式

访问 http://localhost:8080/webpack-dev-server/index.html

n  inline 模式

在命令行中指定该模式webpack-dev-server --inline,这样http://localhost:8080/index.html 页面就会在 js 文件变化后自动刷新了。

以上说的两个页面自动刷新的模式都是指刷新整个页面,相当于点击了浏览器的刷新按钮。

webpack-dev-server 还提供了一种 --hot 模式,属于较高阶的应用

$webpack-dev-server --help

$webpack-dev-server                         //默认会读取webpack.config.js

$webpack-dev-serve --config            //指定配置

$webpack-dev-serve --host               //指定ip

$webpack-dev-serve --compress   //启动gizp压缩

除了上面可以通过命令行参数的方式,也可以通过配置文件webpack.config.js

module.exports ={

         //…

         devServer:{

                   inline:true

}

}