Node
Node是基于chrome V8的js运行环境
去node.js官网下载安装包安装即可
在命令行工具输入node -v后回车可查看node环境是否安装成功
js是基于ECMAScript语法的,操作BOM和DOM
node.js也是基于ECMAScript语法,还有额外的Node API
如果需要不依赖html运行js,只需要在js所在目录按住shift,右键打开命令栏运行
node.js内部的变量和方法默认不能被外部访问,如果a.js内部的方法要被外部(b.js)访问使用:
1.在a内使用exports.变量=变量
2.在a内使用module.exports.变量=变量
如果同时使用export和module.expore变量,以module.expore为准
3.在b内使用require(‘文件名’)访问
Node系统模块
fs方法
f:即file文件
s:即system系统
./代表本级目录 ../代表下级目录
读取文件
fs.readFile(“文件路径”,“文件编码”,回调函数)
文件引用 const fs = require(”fs“);
回调函数内包含(err,doc)
err代表是否出错,返回null代表没有出错,doc为文件内容
写入文件
fs.weiteFile(“要写入的文件名”,“要写入的内容”,回调函数)
如果没有要写入的文件系统会自动创建
路径拼接
path方法
window的路径基本使用/\
但服务器linux只有/
用户上传头像等是保存到服务器中,所以需要路径拼接
导入path模块
const path= require(“path”)
let fin = path.join(“a”,“b”,“c.css”)
结果为a\b\c.css
在大多数情况下都会使用绝对路径
使用--dirname可以获取绝对路径
eg:path.join(__dirname,"路径")
第三方模块
是多个文件组成的包 npmjs.com有文档
部分第三方模块可以链式编写,即res.status().send()
获取第三方模块,使用npm(node packge manager)命令
下载:npm install 模块名称(下载到命令行所在目录)
卸载:npm uninstall 模块名称
nodemon是一个第三方辅助执行文件(文件被修改会自动执行)
1.npm install nodemon -g(-g代表全局安装)
2.使用nodemon代替node执行
3.ctrl+c结束命令
nrm:npm下载地址切换工具
1.npm install -g
2.nrm ls可查看下载地址列表
3.nrm use +地址
gulp第三方模块前端构建工具
项目上线,html、js、css合并
语法转换
公共文件抽离
1.npm install gulp
2.在项目根目录建立gulpfile.js文件
3.创建两个文件夹,src文件夹放置源代码,dist文件夹放置压缩后的文件
4.在gulpfile.js内编写任务
5.执行gulpfile.js
gulp中的方法(用*可以获取所有同类型文件)
gulp.src();获取要处理的文件
gulp.dest()输出文件
gulp.task()建立gulp任务
gulp.watch()监控文件变化
eg:const gulp = require("gulp");
gulp.task(first,()=>{
gulp.src("./src/css").pipe(gulp.dest('dist/css'))
]})
gulp插件
gulp-htmlmin压缩html文件中的代码
gulp-csso压缩css
gulp-babel js语法转化
gulp-less less语法转化
gulp-uglify 压缩混淆js
gulp-file-include 公共文件包含
一般网站头部和尾部会用到,使用@@include(“公共路径”)可以引用
browsersync 浏览器实时同步
gulp可以将所有任务封装起来依次执行eg:gulp.task('default',['htmlmin','cssmin','copy'])
package.json
package.json会记录项目相关信息,包括第三方模块(在dependencies字段中),快速生成package.json文件可以使用 npm install -y
在传输时可避免传递node-modules模块(本模块过大),使用npm install即可下载所有第三模块
开发依赖
项目在开发阶段的依赖称为开发依赖,但有些项目依赖在上线之后不需要了,所以在安装包时,在开发阶段需要的依赖以--save-dev命令结尾,此文件会存储在devDependencies中,如果在服务器线上环境使用--production
服务器端
url:传输协议://IP或域名:端口(默认为80)/资源所在位置
http超文本传输协议
创建web服务器
请求报文
post 发送数据(安全,放在请求体中)
get 请求数据(不安全,通过url传递)
req.headers获取请求报文信息
req.url获取请求地址
req.method获取请求方法
res.writeHead(状态码,{‘content-type’:文件类型})可以设置http状态码和默认编码方式
获取文件type可以使用mine插件
url.parse(req.url,true)会解析url的参数(限于get请求)
url.parse().pathname可以返回无参数的url
querystring可以处理post请求的字符串
路由
请求什么响应什么,网页的访问路径
同步api从上到下执行,异步api会放在栈堆中,等到触发才执行
异步api需要通过回调函数来调用,没有返回值,所以需要封装callback函数
读取文件是异步API,第二部是回调函数
回调异步解决的方法:将回调函数写入回调函数中,但会导致过多嵌套,还可以使用promise构造函数
eg:let promise = new Promise((resolve,reject)=>{
fs.readFile("./1.txt",''utf8',(err ,result) = >{
if(err!=null){
reject(err)
}else{resolve(result)}
})
})
promise.then((result)=>{
console.log(result);
})
.catch((err)=>{console.log(err)})
如果成功调用resolve,失败调用reject
es7新增异步函数
在普通函数前加async关键字,默认返回promise
eg: anync function fn (){
throw"发生了一些错误"
return 123;
}
fn().then(function(data){
console.log(data)
}).catch(function(err){
console.log(err)
})
throw抛出异常,使用catch接收,throw后的代码不执行
async内部有await方法,可以暂停函数的执行,只有有返回值才执行
promisify方法可以改造异步方法比如fs方法,返回一个prominse对象
在调用Promisify方法
eg:const promisify = require("util").promisify
const readFile = promisify(fs.readFile)
在浏览器中去全局对象是window,在node中全局对象是gobal
数据库
网站的数据是存储在数据库中
mongoDB 基于JSON
mysql 用于PHP
第三方模块mongooes
需要启动MongoDB net stat MongoDB
增删改查
EXPRESS框架
使用npm install express命令进行下载
框架特性
提供了简洁的路由定义
对获取http请求参数进行简化处理
对模板引擎支持程度高,方便渲染html
提供了中间件机制有效控制http请求
拥有大量第三方中间件对功能进行扩展
中间件
中间件就是一堆方法,可以接收客户端发来的请求,也可以对请求做出响应,也可以将请求交给下一个中间件处理
中间件由中间件方法(由框架提供),请求处理函数(开发人员提供)
可以针对同一个请求设置多个中间件
中间件默认从上到下匹配,匹配成功就终止匹配,可以使用next方法将请求的控制权交给下一个中间件
中间件常用来做登录保护,没有登录就不调用next方法
还可以在网站维护时设置中间件,拦截所有路由
可以自定义404页面,在所有路由最后定义,代表上面的都没有匹配,使用res.status设置状态码
框架模板引擎
unique可以判断数据是否重复
serializeArray可以获取表单中用户输入的内容,默认是数组内部有两个值,一个是name即表单的name,一个是value,即表单的value
密码加密
第三方模块bcrypt,单程加密,可以在密码中加入随机字符串增加密码的破解难度
cookie和session
cookie是服务器在第一次响应客户端请求的时候存储在客户端,在下一次请求服务器时,会自动发送cookie中的储存数据给服务器端,cooike是有过期时间的
session是一个对象,可以储存多条数据 ,每条数据都有对应的sessionid作为标识,页面关闭session就失效了