nodejs新手教程

678 阅读3分钟

参考极客学院

本文将不断更新

p01初识nodejs

1.1.1认识nodejs

nodejs诞生于2008年,创建人是Ryan Dahl,他的目标是创建一个易扩展,适用于现代web应用通信的服务器平台 nodejs的主要应用领域为

  • restful API
  • 实时通信:如消息推送等
  • 高并发
  • i/o阻塞

nodejs分为nodejs和iojs,原因是nodejs的初衷是提升性能,而社区觉得需要将精力放于更多功能的开发,于是出现了分支,目前二者还是一致的。

1.1.2nodejs和javascript的关系

javascript = ECMAScript(语法) + BOM(浏览器对象) + DOM(文档对象)

2008年,V8随着Google Chrome一同面世

nodejs与JavaScript的关系:nodejs使js变成一门全栈语言,JavaScript使nodejs高并发成为可能

1.1.3 Node.js的特点

部署简单方便

  • js原本就是运行在web,配置简单
  • 使用npm易于扩展,需要使用的时候只需要将其载入即可

事件驱动

  • js为浏览器而生,需要处理与浏览器的交互,使用函数来处理事件;nodejs同样事件驱动

异步编程

  • 大部分语言是同步语言,代码一句句执行。执行完成当前的行才可以执行下一句,当处理网络请求,读取文件等操作时耗时多

  • Nodejs在进行I/O操作时异步

  • 实现方式:Nodejs采用发布/订阅模式,维护一个注册机构,可以针对所有事件统一管理

高效与性能:待补充

单线程与多进程:待补充

1.2 nodejs开发环境搭建

1.2.1 nodejs开发环境

技术领域是没有门槛和限制的

web 全栈开发包括的方面:

HTML/css页面构建,浏览器端开发,服务器端开发,数据库管理,服务器运维

nodejs对应的:mongoDB数据库、express模块、angular框架、nodejs

nodejs的执行环境:google nodejs的开发环境主要是google的v8引擎,还有文件系统、网络功能、二进制数据、数据流、加密与解密。nodejs通过模块来使用,需要先引用模块,再使用。 nodejs不是编译型语言,所以开发工具的范围比较广。可以使用集成开发环境和文本编辑器。

1.2.2 macox 安装

  1. 环境依赖于xcode,先安装:
xcode-select --install

2.安装homebrew:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  1. 安装nodejs
brew install nodejs
  1. 安装mongodb,不支持brew install mongodb安装,可以参考官网
brew tap mongodb/brew
brew install mongodb-community
  1. 一款编辑器,我选择的是vscode。极客教程推荐的是webstorm和sublime,大家也可以试试

  2. 然后就可以测试是否安装成功

1.3 nodejs 常用开发工具的使用

1.3.1 开发工具的使用
1.3.2 npm与调试工具的使用

nodejs的功能以包存在 包的分类:在命令行下使用的,全局安装;在项目中使用的包,本地安装(即在项目中安装)

全局安装一下的包

  • nodemon: 监听js文件的变化并实时运行
  • pm2:常用的node进程管理工具
  • node-inspector: nodejs的调试利器 另外,还需要简单了解chrome developer tool以及http通信
npm install express

可以安装淘宝镜像源(tnpm)

1.3.2 常用linux命令介绍

主要介绍三个方面的命令:文件与文件夹操作,系统管理,vi操作 top:查看进程情况 ps aux: 查看进程情况 ifconfig:打印网卡列表

1.4 基于nodejs的后端应用简介

http:

P02 nodejs的html模块和Url模块

以下代码均需要在vscode建一个node文件,node运行,并在浏览器访问页面;代码更新后文件重新运行,页面刷新)

http模块

http的api文档

如果需要打印中文,则要设置UTF-8的编码:

response.writeHead(200, {'Content-Type': 'text/plain;charset="UTF-8"'});
response.end('你好 World');

url模块

const url = require('url'),
    api = 'http://localhost:8081?name=charmia&age=18';
console.log(url.parse(api,true)); //true表示进行解析

将http与url模块结合使用获取参数

const http = require('http');
const url = require('url');
http.createServer(function (request, response) {
  response.writeHead(200, {'Content-Type': 'text/plain;charset="UTF-8"'});
  const myUrl = request.url;
  console.log(request.url);
  if(myUrl === '/favicon.ico') {
    response.end('hello');
  } else {
    const userInfo = url.parse(myUrl, true).query;
    console.log(userInfo);
    response.end(`${userInfo.name},${userInfo.age}`);
  }
}).listen(8081);

console.log('Server running at http://127.0.0.1:8081/');

访问localhost:8081?name=charmia&age=1

  1. 我们vscode的termanal相当于后台的控制台,打印出
Server running at http://127.0.0.1:8081/
/?name=charmia&age=1
{ name: 'charmia', age: '1' }
/favicon.ico

2.页面显示“response.end()”的内容

charmia,1

P03 Nodejs中supervisor工具的使用

在上一节当中,服务端的js代码只有在第一次引用,才会重新加载;如果node已经加载了某个文件,即使我们更新了js文件,node也不会重新加载这个文件。supervisor是可以解决这个问题

全局安装:

npm install -g supervisor

使用supervisor替代node命令运行js文件

supervisor test.js

更新代码,访问接口,看nodejs是否会自动重载

P04 Commonjs,Nodejs模块,自定义模块

commomJs是啥