Presentation is loading. Please wait.

Presentation is loading. Please wait.

网络协会2017培训 Node.js专题 (1) 2017/3/12 – Payne.

Similar presentations


Presentation on theme: "网络协会2017培训 Node.js专题 (1) 2017/3/12 – Payne."— Presentation transcript:

1 网络协会2017培训 Node.js专题 (1) 2017/3/12 – Payne

2 Node.js 是什么 Node.js是一个开放源代码、跨平台的、可用于服务器端和 网络应用的运行环境。
Node.js应用C++语言写成,采用Google的V8引擎来执行 代码,大部分基本模块都是用JavaScript写成的。Node.js 含有一系列内置模块,使得程序可以作为独立服务器运行。 Node.js正在向服务器端平台发展,并已被IBM、 Microsoft、Yahoo!、Walmart、LinkedIn、PayPal等公 司采用。

3 Node.js 的API Node.js允许通过JavaScript和一系列模块来编写服务器端应用和 网络相关的应用。
核心模块包括文件系统I/O、网络(HTTP、TCP、UDP、DNS、 TLS/SSL等)、二进制数据流、加密算法、数据流等等。Node模块 的API形式简单,降低了编程的复杂度。 6.x版API文档:

4 Node.js 开发框架 使用框架可以加速开发。常用的框架有Express.js、 Socket.IO和Connect等。并且支持运行在多个主流的服务 器操作系统上。 Node.js也可以使用CoffeeScript、TypeScript,以及其他 能够编译成JavaScript的语言编程。

5 Node.js 的特点 1. JavaScript 2. 非阻塞 3. 事件驱动 4. 单线程 5. 庞大的且活跃的模块管理器社区

6 Node.js 的特点 绝大多数的代码都是使用JavaScript编写的,只需要 学一门语言就可以写前后端的代码; 并且支持调用C++的类库提高运行效率; 采纳了Common.JS的模块思想; 支持运行ES6风格的JS代码。

7 Node.js 的特点 不像大多数的语言,只有前一条命令执行完毕才会执行 后面的命令,如C++、PHP。这类语言是阻塞的。
但是JavaScript、Node.js是非阻塞的,即多条命令可 以同时被运行,通过回调函数得知命令已结束运行。 如何优雅、高效、条理清晰地“调教”这些回调函数, 是学习Node.js的关键。

8 Node.js 的特点 Node.js是事件驱动的。开发者可以在不使用线程的 情况下开发出一个能够承载高并发的服务器。

9 Node.js 的特点

10 Node.js 的特点 npm是Node.js附带的包管理器。
npm是一个命令行工具,用于从NPM Registry中下载、 安装Node.js程序,同时解决依赖问题。 开发者可以很轻易地在npm社区安装各种各样的Node.js 甚至JavaScript的模块(包),如jQuery、Grunt、WebPack。 国内一般使用淘宝维护的NPM镜像——cnpm。

11 Node.js 安装 (Windows) https://nodejs.org/en/ 到官方网站,点击Download即可。
一般选择 LTS版本。

12 Node.js 安装 (OSX/*nix) 使用 nvm 安装 Node.js。
教程: 7%8D%E8%A3%85%E4%B9%8B%E8%B7%AF-Node- js%E5%AE%89%E8%A3%85%E4%BD%BF%E7%94%A 8%E7%AF%87/

13 运行 Node.js 程序 在终端(Terminal)、命令提示符(Command) 运行 node 即可打开 Node.js(类似于Python)。 如果要执行一个JavaScript文件,则需要“node app.js” (文件名)。如果是 .js 后缀的文件,可以 省略后缀(如:node app)

14 开发 Node.js 项目的环境 1. WebStorm (极力推荐,学生免费使用正版) 2. Atom (需要折腾一些插件,胜在免费)
3. SublimeText (需要折腾一些插件,而且付费) 4. Vim (额,你能折腾好代码提示也许好用) 5. 记事本 (反人类)

15 我的第一个 Node.js 小程序 下面的教程以 WebStorm为例,运行WebStorm。

16 我的第一个 Node.js 小程序

17 我的第一个 Node.js 小程序

18 我的第一个 Node.js 小程序 试着自己运行一下 Hello World 的Node.js 项目

19 我的第一个 Node.js 小程序 运行后,下方的 Run 面板会展示 Node.js 程序输出 到控制台的信息。
图中内容为服务器 绑定到3000端口 :3000

20 我的第一个 Node.js 小程序 瞧,这就是你的第一个 Node.js 的网站。 虽然页面简单了点,但 是也是迈出了最关键的 一步

21 模块 Node.js 最关键的部分是模块。 所有的 JavaScript 脚本都可以封装为模块,被另一个 JavaScript 的脚本调用,类似于 Python 的 import。 模块可以提高代码的重用度,也方便梳理项目的结构。 Node.js 采用的是 Common.JS 的规范。 具体的细节:

22 制作一个模块 module.exports 属性表示当前模块对外输出的接口,其他文件加载 该模块,实际上就是读取module.exports变量。 const Hello = "Hello!"; module.exports = { "hello": "World!", "toString": () => Hello, };

23 制作一个模块 除了 module.exports,Node.js 也提供 exports属性作为模块封 装的工具。
const Hello = "Hello!"; exports.hello = "World!"; exports.toString = () => Hello;

24 加载一个模块 Node使用CommonJS模块规范,内置的require命令用于 加载模块文件。
require命令的基本功能是,读入并执行一个JavaScript文 件,然后返回该模块的exports对象。如果没有发现指定模 块,会报错。 E.g. var Express = require("express"); var Teacher = require("../models/teacher");

25 第三方模块安装 NPM 是 Node.js 最大的包管理器。 查询第三方库:https://npm.taobao.org/
只安装: npm install <module name> 安装并写入package.json: npm install <module name> -- save 安装到全局:npm install -g <module name> 更多操作请查询 npm help

26 第三方模块安装 好比说我们按照Mongodb的连接库——mongoose。 需要把它写入到项目的 package.json 文件的依赖中。
npm install mongoose –-save 由于npm在国外,为了提高安装效率,建议使用 cnpm:

27 了解 Express Express 是 Node.js 的一个快速、轻量级的Web框架。 它帮助你用最少的代码构建一个复杂的网站,是Node.js流行的入门 级框架。 它遵循MVC的软件设计模型。 官网: 4.X版API文档:

28 标准 Express 项目结构 -> controllers 控制器 【具体的页面/接口逻辑】
-> models 数据模型 【对接数据库】 -> views 前端界面模板 (WebAPP不需要) -> public 前端静态文件夹 (采用CDN可以不需要) -> proxy / services 代理层 (业务不复杂的项目不需要) -> routes 路由表 app.js 主程序入口 package.json Node.js 项目配置文件

29 package.json Node.js 每个项目的根目录下面,一般都有一个package.json文件, 定义了这个项目所需要的各种模块,以及项目的配置信息(比如名 称、版本、许可证等元数据)。 npm install 命令根据这个配置文件,自动下载所需的模块,也就 是配置项目所需的运行和开发环境。(Github 下载好一个Node.js 项目就要这样做,它可以自动下载依赖的模块。) 开启一个新的项目时,可以使用 npm init,npm会引导你创建。

30 运行WebStorm 生成 Express 项目
WebStrom 创建的 Node.js 项目稍微和正常的项目有些不同。 Node.js 的真实启动入口是: bin/www

31 剖析 app.js 加载全局必要的模块 —— express、cookieParser、bodyParser。
path 用于计算路径,favicon用于展示网站图标,logger用于输出记录日志。

32 剖析 app.js 此处为加载 route(路由)模块,为后面的配置URI路由做准备。 以后会教更优雅的实现方式。

33 剖析 app.js

34 剖析 app.js

35 Express 路由 var express = require('express');
var router = express.Router(); // 用 GET 方法访问 / (首页) router.get('/', function(req, res, next) { // 渲染模板 index.ejs 并且向模板传输对象 res.render('index', { title: 'Express' }); }); module.exports = router;

36 Express 中间件的设计理念 Express 的路由执行顺序都是靠中间件 (Middleware) 的顺序控制的。 当一个中间件处理完,可以通过调用 next() 传递给下一个 中间件,如果没有调用 next(),则请求不会往下传递。 如内置的 res.render 其实就是渲染完 html 直接返回给客 户端,没有调用 next(),从而没有传递给下一个中间件。

37 Express 中间件的示范 var app = express(); app.use(function(req, res, next) {
console.log('1'); //先输出 1 next(); //到下一个中间件 }); console.log('2'); //再输出到 2 res.status(200).end();

38 Express 中间件的模型 中间件是一个函数(可能是匿名函数),有 req、res、 next三个形参。
req: Request HTTP的请求属性、方法 res: Respond HTTP的响应属性、方法 next: 指向下一个中间件的指针 function(req, res, next) { res.render('index', { title: 'Express' }); }

39 中间件的 req HTTP的请求(网站访问者通过浏览器发送到后台的所有信 息)都是通过req参数获取的。
包含访客的网址、POST发送的数据、Query带上的参数、 用户的协议头、用户的IP、用户采用的协议、用户的 Cookie等等。 常用属性:req.body(POST过来的数据), req.query(QueryString), req.params, req.ip, req.cookies

40 中间件的 res Node.js 服务器向网站访客返回数据靠res操控。 常用方法:res.render (渲染一个模板)
res.json (返回一个JSON文件) res.cookie (设置一个Cookie) res.send (发送任何数据,如字符串、二进制流) res.sendFile (发送一个文件)

41 中间件的种类 为了更好的开发,我们需要对中间件进行细分。 主要分为: 1. 通用全局插件 2. 局部插件 3. 控制器

42 通用全局插件 一般是 Express 的插件,如前面提到的解析客户端发送的 JSON的 bodyParser,解析客户端发送的Cookie 的 cookieParser。 或者是使得项目支持 Session 的 express-session。 或者是使得项目不受CSRF攻击的 csrf。 或者是记录访问日志的强大模块 logger。 一般在项目的主程序(app.js)上加载这些插件。

43 局部插件 (中间件) 这些中间件是一些通用操作的封装。 如: 做访问控制的权限管控中间件(控制登录); 做人机验证的中间件(极验、验证码);
做数据统一封装的中间件(API接口统一输出)。 一般在需要用到的路由上加载。

44 控制器 控制器是MVC的组成部分。 在Node.js中,单个控制器由单个网页/接口的业务 逻辑组成。
下面以一个登录页面验证登录的接口的业务逻辑作 为例子。

45 控制器例子 获取用户发送过来的账号密码 判断账号密码是否正确 返回对应的操作结果

46 控制器例子 要求: 1. 制作一个基于AJAX POST的登录小页面 2. 可以校验用户名和密码 3. 登录失败会提示为什么失败
4. 登录成功会提示用户名是什么 5. 采用两个不同的中间件实现这个目标

47 控制器例子 自己可以仿造刚刚的例子试着做一个简单的控制器 和 通用的JSON数据返回中间件。 有问题欢迎在微信群咨询各位dalao
下一次会教怎样把数据库引入项目中


Download ppt "网络协会2017培训 Node.js专题 (1) 2017/3/12 – Payne."

Similar presentations


Ads by Google