1. Node开发概述
1.1 为什么要学习服务器端开发基础
- 能够和后端程序员更加紧密的配合
- 网站业务逻辑前置,学习前端技术需要后端技术支持(Ajax)
- 扩宽知识视野,能够站在更高的角度审视整个项目
1.2 服务器端开发要做的事情
- 实现网站的业务逻辑 比如登录
- 数据的增删改查 比如电商平台的购物车
1.3 为什么选择node
- 使用JavaScript语法开发后端应用
- 一些公司要求前端工程师掌握node开发
- 生态系统活跃,有大量开源库可以使用
- 前端开发工具大多基于node开发
1.4 node是什么
node是一个基于Chrome V8引擎的JavaScript代码运行环境
Chrome V8引擎 JavaScript代码执行引擎。
LTS = Long term support 长期支持版 稳定版
current 拥有最新特性 实验班
powershell
node -v 查看安装版本
1.5 node.js 组成
- JavaScript由三部分组成,ECMAScript DOM BOM 其中ECMAScript是核心 DOM BOM是浏览器这个运行环境为JavaScript这个语言提供的api
- nodejs是由ECMAScript及node环境提供的一些附加api组成
1.6 node.js 模块化开发
JavaScript开发的弊端:文件依赖和命名冲突
所以需要模块化,需要的开放出去 不需要的封装掉
软件中的模块化开发:一个功能就是一个模块,多个模块可以组成完整应用,抽离一个模块不会影响其他功能的运行。比如
app.js
user.js post.js goods.js
addUser.js deleteUser.js findGood.js addGood.js
node.js 规定一个js文件就是一个模块,模块内部定义的变量和函数默认情况下载外部无法得到
exports对象进行成员导出,使用require方法导入其他模块
exports.version = version;
exports.sayhi = sayhi;
// b.js
let a = require('./b.js');
console.log(a.version);
module.exports.version = version;
底层理解 exports 和 module.exports 都是对象,指向同一地址空间,如果不同的话,以module.export为准
1.7 系统模块fs 文件操作
const fs = require('fs');
读取文件内容
fs.readFile('文件路径/文件名称'[,'文件编码'],callback);
fs.readFile('../css/main.css','utf-8',(err,doc) => {
// 如果文件读取发生错误,参数err的值为错误对象,否则err为null
// doc参数为文件内容
if(err ==null){
}
})
node 中所有的回调函数第一个参数都是error。错误优先的回调函数
写入文件
fs.writeFile('文件路径/文件名称','数据',callback)
例如项目中写入错误日志。
const content = '';
fs.writeFile('../index.html',content,err => {
if(err != null){
console.log(err);
return;
}
console.log('文件写入成功');
})
系统模块path 路径操作
为什么要进行路径拼接??
- 不同操作系统的路径分隔符不统一
- Windows是 \ /
- Linux是/
- Linux系统通常被用作网站的服务器
比如 图片上传功能 存在服务器的某一个硬盘文件夹
路径拼接语法
path.join('路径','路径',...)
相对路径 vs 绝对路径
- 大多数情况下使用绝对路径,写相对路径不安全
- 因为执行的时候一般是当前工作目录,所以相对路径不安全
- 使用__dirname(两个下划线)获取当前目录所在绝对路径。
- require时相对路径是相对当前目录,所以require可以使用相对路径
1.8 第三方模块
包,第三方模块,多个文件组成并在一个文件夹中
存在形式
- js文件,提高项目具体功能API接口
- 命令行工具存在
获取第三方模块
npmjs.com 第三方模块的存储和分发仓库
npm (node package manager): node 第三方模块管理工具
- npm install
- npm uninstall
本地安装和全局安装
- 命令行工具:全局安装
- 库文件:本地安装
1.9 第三方模块 nodemon
在nodejs中每次修改文件都要在命令行中重新执行该文件,非常繁琐
- npm install nodemon -g 下载 全局安装
- 在命令行工具中使用nodemon命令代替node执行
- 用 ctr+C退出
1.10 第三方模块 nrm
nrm (npm registry manager): npm下载地址切换工具
- npm install nrm -g
- 查询 nrm ls
- 切换 nrm use 下载地址名称
1.11 第三方模块 Gulp
基于node平台开发的前端构建工具
将机械化操作编写成任务,想要执行机械化操作时执行一个命令行命令任务就能自动执行了
用机器代替手工,提高开发效率
- npm install gulp 下载gulp库文件
- 在项目根目录下建立 gulpfile.js
- 重构项目的文件夹结构 src目录放源代码 dist目录放构建后文件
- 在gulpfile.js中编写任务
- 命令行工具中执行任务
1.12 package.json文件
package.json的作用
项目描述文件,记录了当前项目信息,例如项目名称、版本、作者,github地址,当前项目依赖了哪些第三方模块等。使用npm init -y
命令生成(y是全部默认值 (yes))
{
"name": "test",
"version": "1.0.0",
"description": "test main是项目主入口文件 scripts是命令的别名 ISC是开发源代码协议",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build":"nodemon app.js"
},
"keywords": [],
"author": "Jiaqi Guo",
"license": "ISC"
}
在终端写npm run build
可以执行nodemon app.js
命令
项目依赖——线上线下都需要
开发依赖——开发阶段需要依赖,线上运营阶段不需要依赖的第三方包 使用npm install xxx --save -dev
将包添加在package.json文件中的DevDependencies字段中, 比如 gulp
npm install 下载所有的依赖
npm install --production 服务器环境 下载项目依赖
package-lock.json
记录模块之间的依赖关系
1.13 Node.js 中模块的加载机制
模块查找规则
require('./find.js');
require('./find');
- require方法根据模块路径查找模块,如果是完整路径,直接引入模块
- 如果模块后缀省略,先找同名js文件再找同名js文件夹
- 如果找到了同名文件夹,找文件夹中的index.js
- 如果文件夹中没有index.js 就找当前文件夹package.js中找main选项的入口文件
- 如果入口文件不存在或者没有则报错,模块没有被找到。
模块没有路径也没有后缀
- 系统模块
- 去node_modules文件夹中
- 首先看是否有改名字的js文件
- 文件夹
- 如果是文件夹看是否有index.js
- 如果没有index.js看文件夹中package.json的main选项确定模块入口文件
- 否则找不到报错