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

Slides:



Advertisements
Similar presentations
●公司簡介. ●公司組織 行銷 企劃部 行銷 企劃部 研發 設計部 研發 設計部 視覺 設計部 視覺 設計部 媒體 製作部 媒體 製作部 行動 裝置部 行動 裝置部 執行長 總經理 管理部 本公司組織人力配置除董事長、執行長、總經理外,共 有六大部門,分別為研發部 6 人、管理部 4 人、視覺設計部.
Advertisements

教师成绩录入步骤 1. 登录教务系统 2. 进入教师成绩管理界面 3. 选择相应的教学班,点击 “ 课程成绩录 入 ” 进入成绩录入界面 4. 点击 “ 设置 ” 按钮设置 “ 成绩分项 ” 5. 录入成绩, “ 保存成绩 ” 按钮可以保存成 绩但不提交(提交后不能再修改成绩) 6. “ 提交成绩 ”
7.2 图示化记忆 记忆的概述 图示化记忆 联想记忆法 奇特联想记忆法 用手记忆.
Web Maple— 云端计 算 数学学院刘海洋 胡婷婷. 需求 什么是 Web Maple ? Maple : “ 数学家的软件 ” 符号和数值计算 动态编程语言 集成编辑环境与图形输出 Web Maple :网页上的数学家 完整的 Maple 功能 云端计算 网页独特的输入输出格式.
开始 周海 2012 级中软定制专业方向说明. 三个方向 Java 与移动互联.NET 软件开发 嵌入式开发.
1 网站设计理念 大连理工大学创新实验学院 优秀网站展示 - LAMP 类网站
Web app和html5给前端带来的变化 —— 我们的html5游戏平台之旅.
爱上我们的图书馆 —新生入馆引导 河海大学图书馆.
事件驱动的移动数据中心 广州舜飞信息科技有限公司 谭荣棉.
Mico的架构之旅 魏佳 Co-Founder & Mico Inc..
讓人看了難忘的故事 中藥房轉載 分享人生積極正面訊息 創造宇宙合諧快樂能量.
笃·行 进·取 创·新 规·范 『专业·科学·务实』 2012年软件学院迎新工作总结汇报 软件学院2012级新生辅导员 侯雪莹.
姓名: 钱琬婷 学号: 0501W238 专业: 计算机科学与技术 指导教师: 陈家琪 教授
中国光大银行“流量分析系统” PHPCPS网络广告联盟系统解决方案 投标方案介绍
年度校樹選拔秀 主辦單位:楊梅國小.
第九章日治時期的台灣(下).
突然好想你们···· 11广告1班—黄丹丹.
程序设计思想与方法入门篇 庄天红.
ES6简介.
国际贸易法.
面对经济全球化.
Html5在移动互联网项目的应用 主讲人:曲毅
第一部分 系统概述 第二部分 技术背景 目录 第三部分 维修流程描述 成功案例 第四部分. 第一部分 系统概述 第二部分 技术背景 目录 第三部分 维修流程描述 成功案例 第四部分.
科學科 污染 空氣 成因 的 : 題目 及 減少空氣污染的方法 陳玉玲 (4) 姓名 : 去到目錄.
基于hadoop与hive的大数据分析体系构建
第1章 导论 倚动实验室.
Campus Perceiving OPhone Widgets’ Suite
Ch03 VB.NET語法建立ASP.NET 網頁程式設計.
第5章 總算走到Web伺服器 ~探險防火牆、Web伺服器~
Python金融数据分析教程 解放你的python编程能力 第4关 如何获取金融数据 Python金融数据分析教程 1.
Selenium 一个用于Web应用程序测试的工具 Robin Ren
基于6LoWPAN的 教室灯光监控系统设计与实现 汇报人:李枝琴 指导老师:王慧锋 2016/10/27 华东理工大学
网络协会2017培训 恶补Web知识训练营 2017/4/7 – Payne.
SIP 封包擷取實驗.
Arena System Technology Architecture 系统技术架构 1、Database V2(Lotus Notes)V3(Oracle8i) 2、Application Server SilverStream2.53 (Java as server side programming.
2018/11/18 福州大学VPN使用指南.
恶补Web知识训练营 (2) 2017/4/14 – Payne
R教學 安裝R 羅琪老師.
AngularJS -- 使用AngularJS进行开发
第 15 章 網路安全.
第22章 WSH (Window Script Host) 基本介紹
作者:梁桐铭 博客: 微信公众号:角落的白板报
認識FTP檔案傳輸協定 建立我的部落格 Archie檔案檢索服務 Google搜尋密技 歷久彌新的老朋友-BBS Skype網路電話
复习 JavaScript && ES6 专题 (1) 2017/3/10 – Payne
Ajax網頁的危機與防禦術 王寧疆 MCAD.NET/MCSD.NET/MCT/MVP 資策會教育訓練處.
Web Crack 专题 – AJAX – 2016/11/18 – Payne 本次培训仅供教学内部用途 实验请遵守相关法律法规
RESTful API 设计及应用 REST Representational State Transfer 演讲人:李盛洲 致
課程名稱:_____________ 指導教授:_____________
Python联合服务器的使用.
WEB统一检索本地整合技术 中国农业大学图书馆 康实.
架站實做—AppServ
Sym社区系统商业版 背景、功能以及技术架构简介.
利用 ASP.NET MVC 提升您的 Web 應用程式
Uliweb-快速易用的 Python Web Framework
人工智能人才培养示范基地建设分享 上海电子信息职业技术学院 邵瑛.
古佳怡 實驗流程.
網站HOLMES DATA監測代碼.
Node.js专题 (2) 做一个留言板 2017/3/24 – Payne
Django 計算機程式設計 期末專題.
HTTP 1.1 Method OPTIONS GET HEAD POST PUT DELETE TRACE CONNECT
本章要点: 了解ASP.NET 4.5的基础.NET Framework。
數位多媒體整合設計 期中報告 進圖三 高常馨.
Javascript 基础 面向非JS语言的开发人员.
ASP动态网页设计实用教程 主讲教师:贾海陶.
指導老師:蘇怡仁老師 組員:陳翊嘉、何盈宏、黃皇瑋、鄭楚懷
【VA虚拟应用管理平台】专题培训 接入防火墙 陕西益和信息技术开发有限责任公司 2011年2月.
大数据应用人才培养系列教材 数据清洗 刘 鹏 张 燕 总主编 李法平 主编 陈潇潇 副主编.
第7章 Internet的应用.
報告寫作必備利器 Zotero書目管理軟體 下載與安裝 華神圖書館
JavaScript 教师:魏小迪
Presentation transcript:

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

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

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

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

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

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

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

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

Node.js 的特点

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

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

Node.js 安装 (OSX/*nix) 使用 nvm 安装 Node.js。 教程: https://blog.micblo.com/2017/01/19/CentOS7%E9%8 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/

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

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

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

我的第一个 Node.js 小程序

我的第一个 Node.js 小程序

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

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

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

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

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

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

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

第三方模块安装 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

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

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

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

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

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

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

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

剖析 app.js

剖析 app.js

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;

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

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

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

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

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

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

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

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

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

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

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

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