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(‘文件名’)访问
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会记录项目相关信息,包括第三方模块(在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
增删改查
使用npm install express命令进行下载
框架特性
提供了简洁的路由定义
对获取http请求参数进行简化处理
对模板引擎支持程度高,方便渲染html
提供了中间件机制有效控制http请求
拥有大量第三方中间件对功能进行扩展
中间件就是一堆方法,可以接收客户端发来的请求,也可以对请求做出响应,也可以将请求交给下一个中间件处理
中间件由中间件方法(由框架提供),请求处理函数(开发人员提供)
可以针对同一个请求设置多个中间件
中间件默认从上到下匹配,匹配成功就终止匹配,可以使用next方法将请求的控制权交给下一个中间件
中间件常用来做登录保护,没有登录就不调用next方法
还可以在网站维护时设置中间件,拦截所有路由
可以自定义404页面,在所有路由最后定义,代表上面的都没有匹配,使用res.status设置状态码
unique可以判断数据是否重复
serializeArray可以获取表单中用户输入的内容,默认是数组内部有两个值,一个是name即表单的name,一个是value,即表单的value
第三方模块bcrypt,单程加密,可以在密码中加入随机字符串增加密码的破解难度
cookie是服务器在第一次响应客户端请求的时候存储在客户端,在下一次请求服务器时,会自动发送cookie中的储存数据给服务器端,cooike是有过期时间的
session是一个对象,可以储存多条数据 ,每条数据都有对应的sessionid作为标识,页面关闭session就失效了