对于刚接触node.js的朋友来说确实有点难以理解,通过接触使用后,Node.js 作为一个基于 Chrome V8 引擎的服务器环境,有很多吸引人的地方,那么我们为什么学node.js呢?一句话概括:Node.js 在基于websockets 推送技术的实时 Web 应用中大放异彩。在过去的 20 多年来我们一直在使用基于无状态请求 - 响应模式的无状态 Web 应用,现在终于拥有了能够实时双向连接的 Web 应用,其中客户端和服务器都可以启动通信,并允许它们自由地交换数据。
我们知道 Apache + PHP 以及 Java 的 Servlet 都可以用来开发动态网页,Node.js 的作用与他们类似,使用 JavaScript 来开发。node.js的一些特点如下:
1.它是一个Javascript运行环境
2.依赖于Chrome V8引擎进行代码解释
3.事件驱动
4.非阻塞I/O
5.轻量、可伸缩,适于实时数据交互应用
6.单进程,单线程
举一个简单的例子:我们通过引入一个新的文件操作模块,创建一个新的文件夹:
先创建一个app.js 文件并输入以下内容
var http = require(‘http’);
http.createServer(function (request, response) {
response.writeHead(200, {‘Content-Type’: ‘text/plain’}); // HTTP Response 头部
response.end(‘Hello World\n’); // 返回数据 “Hello World”
}).listen(8888); // 监听 8888 端口
// 终端打印如下信息
console.log(‘Server running at http://127.0.0.1:8888/’);
输入 node app.js 即可运行,随后访问 便会看到输出结果。注:在创建文件夹的同时,我们还能通过指令实现增删改的功能。
介绍下npm:node的包管理器,是全球最大的开源库生态系统:
在讨论 Node.js 时,一件绝对不应该被忽略的事是支持使用内置的 npm 工具进行包管理,默认情况下每个 Node.js 环境都会安装。 npm 模块的概念非常类似于 Ruby Gems:一组可通过在线存储库轻松安装,具有版本和依赖关系管理的可重用组件。
当然,可以在 npm 网站上找到已打包模块的完整列表,也可以使用自动与 Node.js 一起安装的 npm CLI 工具进行访问。模块生态系统对所有人开放,任何人都可以发布自己的模块,发布的模块将出现在 npm 存储库中。
一些很有用的 npm 模块:
☆ express —— Express.js,一个受 Sinatra 启发的 Node.js Web 开发框架,当今大多数 Node.js 应用程序的事实标准。
☆ connect —— Connect 是 Node.js 的可扩展 HTTP 服务器框架,提供了一系列称为中间件的高性能“插件”作为Express的基础。
☆ pug(以前叫 Jade)—— 受 HAML 启发的流行模板引擎之一,Express.js 中的默认选项。
☆ mongodb 和 mongojs —— MongoDB 包装器,为 Node.js 中的 MongoDB 对象数据库提供 API。
常用的指令npm init 命令的原理并不复杂,调用脚本,输出一个初始化的 package.json 文件就是了。所以相应地,定制 npm init 命令的实现方式也很简单,在 Home 目录创建一个 .npm-init.js 即可,该文件的 module.exports 即为 package.json 配置内容,需要获取用户输入时候,使用 prompt() 方法即可。
例如编写这样的 ~/.npm-init.js
const desc = prompt(‘description?’, ‘A new package…’)
const bar = prompt(‘bar?’, ‘’)
const count = prompt(‘count?’, ‘42’)
module.exports = {
key: ‘value’,
foo: {
bar: bar,
count: count
},
name: prompt(‘name?’, process.cwd().split(’/’).pop()),
version: prompt(‘version?’, ‘0.1.0’),
description: desc,
main: ‘index.js’,
}
此时在 ~/hello 目录下执行 npm init 将会得到这样的 package.json:
{
“key”: “value”,
“foo”: {
“bar”: “”,
“count”: “42”
},
“name”: “hello”,
“version”: “0.1.0”,
“description”: “A new package…”,
“main”: “index.js”
}
应该使用Node.js的场景,例如:
1、聊天服务器:如果聊天的人很多,用户的与服务器之间的并发链接量很大,但是服务器端的数据处理并不复杂;
2、综合类服务网站和电子商务网站的服务器:在这类网站中的服务器端,往往可能每秒存内可以接受多达上千条的数据并且需要将这些数据写入数据库中,NodeJs可以通过其队列机制将这些数据迅速写入缓存区中,然后再通过每一个单独的处理从缓存区中取出这些数据并将其写入数据库中。