先回顾一下我们前端的主要工作:
1、写页面 --- HTML
2、美化页面 ----- CSS
3、调用后台接口API去请求数据或 提交数据 ----- JS
例如:
前端核心之一技能:Ajax --> XHR、JQuery、$.agax()、$.get、$.post
其中 JQuery 更多的是操作 DOM 方面的。
4、HTML5 和 CSS3 新语法、新特效
例如:
动画、移动web的屏幕适配(媒体查询)
5、Angular ---- 单页面应用程序
6、Vue ---- 基于Node
7、微信小程序 --- 官网
8、React Native --- ios、Android 混合开发
。。。
后端主要工作:
1、主要进行业务逻辑的操作
2、例如: 数据的增加、删除、修改、查询、操作数据库
3、对外暴露API 接口 ---- (API后台的灵魂)
前端(PC、IOS、Android等)和 后端 的协作流程?
同时进行开发:
1、前端写页面,调用后台的接口;(调用API)
2、后台接受前端发送过来的请求,进行业务处理,处理结果返回给前端。(提供API)
1、学习Node首先要学习如何使用 npm 包管理器
区别 NPM、Github、Git
- npm包管理器 和iOS 的 CocoaPods 很相似,里面托管了各种各样的包,主要是方便管理和维护。
- Github、码云 代码托管平台(托管了各种各样的代码仓库)
- Git是用来对代码进行分支版本管理
安装包
-
第一次使用 先初始化(在当前文件打开终端) npm init -y ,你会看到工程里有个 package.json,将来所有安装的包,都会记录到这个文件中
-
使用 npm install 包名 --save/--save-dev 去安装包;其中,install 可以简写成 i ;
-
--save 表示把包安装到部署依赖中(在开发和部署上线都需要使用的包)--save可以简写成 -S,
save-dev 表示安装到开发依赖(只在项目开发阶段需要用到的包)--save-dev可以简写成 -D; -
npm i 包名 -g ,其中,-g 表示全局安装某些包,通过-g安装的包都在C:\Users\用户名\AppData\Roaming\npm下面
卸载包
- npm uninstall 包名 --save/--save-dev或者npm remove 包名 --save/--save-dev
yarn
- yarn和npm的作用完全一样,都是用来管理项目中的第三方依赖包的!
- yarn是Facebook公司推出来的一套包管理工具!
【React,尤其是ReactNative,默认就是用Yarn去装包的】
- yarn会缓存曾经安装过的包;但是npm也会缓存,但是效果不如yarn明显;
学习当然离不开 nodejs文档.
Node它是什么?
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。
Node.js 的包管理器 npm,是全球最大的开源库生态系统。
Node可以做什么?
- node属性中后端。
- Node可以作为前端的一个工具去使用,通过NPM安装好用的工具;Node可以开发一些前端的工具【i5ting_toc】
- Node能做服务器
- Node还可以操作数据库并对外提供数据接口
- Node能做即时聊天(到时会分享怎么做!!!)
总结:Node.js 就是一个Javascript的服务端运行环境(依赖于Chrome 的V8引擎),为Javascript提供了服务器端编程的能力!
怎么运行第一文件?
- 直接在命令行中输入 node 空格文件名,回车。
下面是讲解 常用的模块化
模块化
概念:
把一些功能类似的代码,封装到一个单独的文件中去,这些单独抽离出来的代码文件,就能够提供各种各样好用的功能;这种通过代码功能分割文件的方式,叫做程序中的模块化。
- 个人认为模块化这是它的亮点之一(高性能、异步操作等都是哈!)。
- Node的模块化好处是:
- 一个 js 文件就是一个功能模块;保证了每个文件的功能(职能)单一;
- 需要什么特定的功能,直接调用某一个特定的模块;
怎么模块化?
- request: Node要求使用内置或第三方的模块时,要引用 request('xxxxx')
- module: 它就是一个模块。(node里一个js 文件就是一个模块!!!)
- exports: 在Node的模块中,如果这个模块需要向外暴露一些成员,供其他JS模块使用??? 怎么办??? ----- 使用 exports.暴露的成员
exports 和 module.exports 的区别
- 通过 module.exports 可以使用 " . " 点 的形式追加属性,也可以使用 " = "等号 直接赋值的形式导出成员;
- exports 只能通过 " . " 点的形式追加属性;不能 使用 “=”等号 直接赋值的形式!
注意:
在一个 module 中,最终向外暴露的成员,以 module.exports 指向的对象为准!
模块加载规则
- 优先从缓存中加载
- 加载核心模块:优先从缓存中加载;如果缓存中没有的话,再去执行加载核心模块!
- 自己的模块:优先从缓存中加载;如果缓存中没有的话,再去执行加载用户模块!
用户模块的查找规则:
如果不写后缀名,则先严格按照给定的文件名去查找模块并加载执行;
index -> index.js -> index.json -> index.node
模块化
- node中的模块化基于commonJS:最显著的特点所有依赖项都是同步加载的!!!
- commonJS由于是一个同步加载规范,所以不适合浏览器端使用;于是,浏览器端需要使用异步的模块加载机制
由于 node是具有中后台的能力,所以后台就经常使用到文件操作:(异步的,注意坑!)
解决异步的坑:
1、嵌套 2、创建一个计数器count,然后判断是否加载完毕 3、promise
// forEach 的使用
data.forEach((value, index) => {}
1、node常见的文件操作
fs.Stats 对象提供了一个文件的信息。
- fs.readFile
- fs.writeFile
- fs.appendFile
...
写出一个类似于 Apache 服务器的服务?(4步)
var http = require('http') // 引入 require(‘http’)
var server = http.createServer() // 创建 服务
server.listen('3000', () => { // 链接 listen
console.log('http://127.0.0.1:3000')
})
server.on('request', (req, res) => { // 请求
}
2、node怎么使用art-template 模板的使用?
- 服务端渲染和客户端渲染的对比
博客园官网
引入 art-template
-
var template = require('art-template')
创建服务器(上面步骤) -
和之前使用的渲染显示到页面的方式一样:
// 显示 {list:allArr} 数组要转对象(模板都是对象) if (count == data.length) { var html = template(__dirname + "/datas/list.html", {list: allArr}) res.end(html) // res: response end(): 表示输出值或渲染 }
注意:nodejs res.end和res.send 区别
简单来说就是 如果服务器端没有数据返回到客户端 那么就可以用 res.end
但是 如果 服务器端有数据返回到客户端 这个时候必须用res.send ,不能用 res.end(会报错)
待更新。。。
网友评论