提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
一、什么是Node.js
一、fs模块
1.读取指定文件中的内容
//导入fs模块,来操作文件
const fs =require('fs')
//调用fs.readFile()方法读取文件
//参数1 读取文件的存放路径
//参数2 读取文件时采用编码格式 一般默认utf8
//参数3 回调函数 拿到对齐失败和成功的结果 err dataStr
fs.readFile('./files/1.txt','utf8',function(err,dataStr){
console.log(err)
console.log('------------------')
console.log(dataStr)
})
2.指定文件中写入内容
3.路径问题
二、path路径模块
1path.join()
2.path.basename()
path.extname()
三、http 模块
创建基本的web服务器
//1导入http模块
const http =require('http')
//2创建web服务器实例
const server = http.createServer()
//3为服务器绑定request事件,监听客服端的请求
server.on('request',function(req,res){
console.log('someon visit oue web server.')
})
//4启动服务器
server.listen(8080,function(){
console.log('server running at http://127.0.0.1:8080')
})
req
res
//1导入http模块
const http =require('http')
//2创建web服务器实例
const server = http.createServer()
//3为服务器绑定request事件,监听客服端的请求
server.on('request',(req,res)=>{
//req是请求对象
const str =`你请求的url地址是 : ${req.url},请求的method类型为 :${req.method}`
console.log(str)
//res是响应对象
//解决中文乱码问题设置响应头Content-Type的值为text/html; charset=utf-8
res.setHeader('Content-Type','text/html; charset=utf-8')
//把中文内容响应给客户端
res.end(str)
})
//4启动服务器
server.listen(8080,function(){
console.log('server running at http://127.0.0.1:8080')
})
根据url地址响应不同的html内容
//1导入http模块
const http =require('http')
//2创建web服务器实例
const server = http.createServer()
//3为服务器绑定request事件,监听客服端的请求
server.on('request',(req,res)=>{
const url =req.url
let content = '<h1>404 Nont found!</h1>'
if(url === '/'||url==='/index.html'){
content='<h1>首页</h1>'
}else if(url === '/about.html'){
content='<h1>关于页面</h1>'
}
res.setHeader('Content-Type','text/html; charset=utf-8')
res.end(content)
})
//4启动服务器
server.listen(8080,function(){
console.log('server running at http://127.0.0.1:8080')
})
//1导入http模块
const http =require('http')
const fs =require('fs')
const path =require('path')
//2创建web服务器实例
const server = http.createServer()
//3为服务器绑定request事件,监听客服端的请求
server.on('request',(req,res)=>{
const url =req.url
const fpath = path.join(__dirname,url)
fs.readFile(fpath,"utf8",(err,dataStr)=>{
if(err) return res.end('404 Not fount.')
res.end(dataStr)
})
})
//4启动服务器
server.listen(8080,function(){
console.log('server running at http://127.0.0.1:8080')
})
//1导入http模块
const http =require('http')
const fs =require('fs')
const path =require('path')
//2创建web服务器实例
const server = http.createServer()
//3为服务器绑定request事件,监听客服端的请求
server.on('request',(req,res)=>{
const url =req.url
// const fpath = path.join(__dirname,url)
let fpath=''
if(url==='/'){
fpath = path.join(__dirname,url)
}else{
fpath = path.join(__dirname,'./clock',url)
}
fs.readFile(fpath,"utf8",(err,dataStr)=>{
if(err) return res.end('404 Not fount.')
res.end(dataStr)
})
})
//4启动服务器
server.listen(8080,function(){
console.log('server running at http://127.0.0.1:8080')
})
四、模块化
加载模块
模块作用域
module 对象(向外共享模块作用域中的成员)
两个功能一样
模块化规范
五、npm与包
npm体验
传统
使用npm包
包管理
快速创建package.json
切换npm下载地址
或者安装nrm
包的分类
项目包
全局包
i5ting_toc
规范包
开发包
功能
初始化包的基本结构
调用
模块化拆分
编写说明文档
发布包
六、express
1.安装
创建基本的web服务器
监听get请求
监听post请求
把内容响应给客服端
获取url中携带的查询参数
托管静态资源
托管多个
挂载路径前缀
nodemon(自动重启)
路由
method就是请求类型post还是get
path就是url地址
模块化路由
中间件
定义中间件
发起请求会在终端调用
简写全局中间件
中间件作用
定义多个中间件
局部中间件
中间件分类
1.应用级
2.路由级
3.错误级
4.expre内置中间件
json
urlencoded
5.第三方
自定义中间件
使用express写接口 api路由模块
get接口
创建api路由模块js文件
在apirouter里编写get接口
post接口
服务器.js======================================================
//导入express
const express = require('express')
//创造web服务器
const app =express()
//解析表单中间件
app.use(express.urlencoded({ extended:false }))
//导入路由模块
const router=require('./apirouter.js')
app.use('/api',router)
app.listen(8080,()=> {
console.log('server running at http://127.0.0.1:8080')
})
路由.js======================================
const express = require('express')
const apiRouter = express.Router()
apiRouter.get('/get',function(req,res){
const query =req.query
console.log(query)
res.send({
status:0,
msg:'get',
data:query
})
})
apiRouter.post('/post',function(req,res){
//通过req.body获取url-encoded数据
const body =req.body
console.log(body)
res.send({
status:0,
msg:'post',
data:body
})
})
module.exports = apiRouter
基于cors解决跨域问题
cors
jsonp接口
七、数据库
八、mysql模块
安装mysql模块
查询数据
插入数据
更新数据
删除数据
web开发模式
身份验证
sesssion认证机制
安装expresss-session
前端首页代码
$(function() {
// 调用 getUserInfo 获取用户基本信息
getUserInfo()
var layer = layui.layer
// 点击按钮,实现退出功能
$('#btnLogout').on('click', function() {
// 提示用户是否确认退出
layer.confirm('确定退出登录?', { icon: 3, title: '提示' }, function(index) {
//do something
// 1. 清空本地存储中的 token
localStorage.removeItem('token')
// 2. 重新跳转到登录页面
location.href = '/login.html'
// 关闭 confirm 询问框
layer.close(index)
})
})
})
// 获取用户的基本信息
function getUserInfo() {
$.ajax({
method: 'GET',
url: '/my/userinfo',
success: function(res) {
if (res.status !== 0) {
return layui.layer.msg('获取用户信息失败!')
}
// 调用 renderAvatar 渲染用户的头像
renderAvatar(res.data)
}
// 不论成功还是失败,最终都会调用 complete 回调函数
// complete: function(res) {
// // console.log('执行了 complete 回调:')
// // console.log(res)
// // 在 complete 回调函数中,可以使用 res.responseJSON 拿到服务器响应回来的数据
// if (res.responseJSON.status === 1 && res.responseJSON.message === '身份认证失败!') {
// // 1. 强制清空 token
// localStorage.removeItem('token')
// // 2. 强制跳转到登录页面
// location.href = '/login.html'
// }
// }
})
}
// 渲染用户的头像
function renderAvatar(user) {
// 1. 获取用户的名称
var name = user.nickname || user.username
// 2. 设置欢迎的文本
$('#welcome').html('欢迎 ' + name)
// 3. 按需渲染用户的头像
if (user.user_pic !== null) {
// 3.1 渲染图片头像
$('.layui-nav-img')
.attr('src', user.user_pic)
.show()
$('.text-avatar').hide()
} else {
// 3.2 渲染文本头像
$('.layui-nav-img').hide()
var first = name[0].toUpperCase()
$('.text-avatar')
.html(first)
.show()
}
}
jwt认证机制
### 使用jwt
安装jwt
定义secret密钥