各位读者好,我正在努力学习前端中,这里是我的学习笔记分享,希望能够对大家有用。
我学习的视频链接是黑马程序员Node.js。
此外,我还有其它前端内容的笔记,大家有需要的可以自行查找。
Node.js是一个基于Chrome V8引擎的JavaScript运行环境。
/* fs.readFile()的语法格式*/
fs.readFilde(path[.options],callback)
/*
调用fs.readFile()
参数1:读取文件存放的路径
参数2:读取文件时采用的编码格式
参数3:回调函数,拿到失败和成功的结果
*/
/*以utf8的编码格式,读取文件的内容,并打印err和dataStr的值*/
const fs = require('fs')
fs.readFile('./files/11.txt','utf8', fuction(err, dataStr){
/*读取成功,err为null*/
/*读取失败,err为 错误对象 , dataStr 为 undefined*/
/*打印读取失败的结果*/
console.log(err)
console.log('-------')
/*打印读取成功的结果*/
console.log(dataStr)
})
/*语法格式*/
fs.writeFile(file, data[.options], callback)
/*
参数1:必选,写入文件的存放路径
参数2:必选,写入的内容
参数3:可选,编码格式,如utf8
参数4:必选,文件写入后的回调函数
*/
const fs = require('fs')
fs.writeFile('./files/2.txt','abcd',fuction(err){
/*读取成功,err为null*/
/*读取失败,err为 错误对象*/
console.log(err)
})
const fs = require('fs')
fs.readFile('./成绩.txt','utf8',function(err,dataStr){
if(err)
return console.log('读取失败'+ err.message)
// console.log('读取文件成功!'+dataStr)
const arrOld = dataStr.split(' ')
const arrNew = []
arrOld.forEach(item => {
arrNew.push(item.replace('=', ': '))
})
console.log(arrNew)
const newStr = arrNew.join('\r\n')
console.log(newStr)
fs.writeFile('./成绩-ok.txt',newStr,function(err){
if(err){
return console.log('写入文件失败!' + err.message)
}
console.log('成绩写入成功')
})
})
/*导入path模块*/
const path = require('path')
/*注意../会抵消前面的路径*/
const pathStr = path.join('/a', '/b/c', '../', './d', 'e')
console.log(pathStr)
/*导入path模块*/
const path = require('path')
/*定义文件的存放路径*/
const fpath = '/a/b/c/index.html'
const fullName = path.basename(fpath)
/*打印出文件名index.html*/
console.log(fullName)
const nameWithoutExit = path.basename(fpath, '.html')
/*打印出index,移除了.html*/
console.log(nameWithoutExit)
/*导入path模块*/
const path = require('path')
/*定义文件的存放路径*/
const fpath = '/a/b/c/index.html'
const fext =path.extname(fpath)
/*打印出.html, 即为文件的扩展名*/
console.log(fext)
相关概念
分四步如下
导入http模块
const http = require('http')
创建web服务器实例
const server = http.creatServer()
为服务器实例绑定request事件,监听客户的请求
server.on('request', function(req,res){
console.log('Someone visit our web serevr')
})
启动服务器
server.listen(80, function(){
console.log('server running at http://127.0.0.1:8080')
})
const http = require('http')
const server = http.creatServer()
server.on('request', (req, res)=>{
/*获取请求的URL地址*/
const url = req.url
/*设置默认的响应内容404 Not found*/
let content = '404 Not found!'
/*判断用户请求的是否为/或/index.html首页*/
/*判断用户请求的是否为/about.html关于页面*/
if(url === '/' || url === '/index.html'){
content = '首页
'
}else if(url === '/about.html'){
content = '关于首页
'
}
/*设置Content-Type响应头,防止中文乱码*/
res.setHeader('Content-Type', 'text/html: charset = utf-8')
/*使用res.end()把内容响应给客户端*/
res.end(content)
})
server.listen(80,()=>{
console.log('server running at http://127.0.0.1')
})
编程领域中的模块化,就是遵守固定的规则,把一个大文件拆成独立并互相依赖的多个小模块。
把代码进行模块化拆分的好处:
Node.js 中根据模块来源的不同,将模块分为了3大类,分别是:
好处是防止全局变量的污染。
在自定义模块中,可以使用module.exports对象,将模块内的成员共享出去,供外界使用。外界用require()方法导入自定义模块时,得到的就是module.exports所指向的对象。
/*
在外界使用require导入一个自定义模块的时候,得到的成员,就是那个模块中,通过module.exports指向的那个对象
*/
const m = require('./自定义模块.js')
console.log(m)
自定义模块
/*在一个自定义模块中,默认情况下,module.exports = {}*/
//对module.exports挂上username属性
module.exports.username = 'zs'
//挂上sayHello的方法
module.exports.sayHello = function(){
console.log('Hello')
}
Node.js中的第三方模块有叫做包。包由第三方团队或个人开发的免费的方便我们写代码的工具。
国外有一家IT公司,叫做npm, Inc.这家公司旗下有一个非常著名的网站: https://www.npmjs.com/,它是全球最大的包共享平台,你可以从这个网站上搜索到任何你需要的包,只要你有足够的耐心!
npm, Inc.公司提供了一个地址为https://registry.npmjs.org/的服务器,来对外共享所有的包,我们可以从这个服务器上下载自己所需要的包。该公司也提供包的管理工具帮助我们的使用,这个工具不需要额外的下载,在我们下载node.js时就已经有了
格式化时间(不适用包的版本)
temp.js
function dateFormat(dtStr){
const dt = new Date(dtStr)
const y = dt.getFullYear()
const m = padZero(dt.getMonth()+1)
const d = padZero(dt.getDay())
const hh = padZero(dt.getHours())
const mm = padZero(dt.getMinutes())
const ss = padZero(dt.getSeconds())
y.innerHTML=y;
m.innerHTML=m;
d.innerHTML=d;
hh.innerHTML=hh;
mm.innerHTML=mm;
ss.innerHTML=ss;
return y+'-'+m+'-'+d+' '+hh+':'+mm+":"+ss
}
//定义补0的操作
function padZero(n){
return n>9 ? n: '0'+n
}
module.exports = {
dateFormat
}
temp1.js
//导入自定义的格式化时间模块
const TIME = require('./temp.js')
//请调用方法,进行时间的格式化
const dt = new Date()
const newDT=TIME.dateFormat(dt)
console.log(newDT)
const moment = require('moment')
const dt = moment().format('YYYY-MM-DD HH:mm:ss')
console.log(dt)
可以在npm的第一个链接中找到包的使用说明书
可以复制这段代码解决
npm config set strict-ssl false
npm config set registry http://registry.npm.taobao.org
npm run serve
链接:https://pan.baidu.com/s/1GkVCnCiv31U56D2JTAUCqg
提取码:h77j
这里是express中文使用说明书
在使用学习时可以参考一下。
//1.导入路由模块
const router = require('./router.js')
//2.使用app.use()注册路由模块
app.use(router)
/*注意:app.use()函数的作用,就是用来注册全局中间件*/
中间件(Middleware ) ,特指业务流程的中间处理环节。
多个中间件之间,共享同一份req和res。基于这样的特性,我们可以在上游的中间件中,统一为req或res 对象添加自定义的属性或方法,供下游的中间件或路由进行使用。
next函数是实现多个中间件连续调用的关键,它表示把流转关系转交给下一个中间件或路由。
//导入express模块
const express = require('express')
//创建express的服务器实例
const app = express()
//导入自定义的中间件模块
const customBodyParser = require('./custom-body-parser')
//将定义的中间件函数,注册为全局可用的中间件模块
app.use(customBodyParser)
app.post('/user',( req,res)=>{
res.send(req.body)
})
//调用app.listen方法,指定端口号并启动web服务器
app.listen(80,function(){
console.log('express server running at http://127.0.0.1:80')
})
中间件模块
//导入Node.js内置的querystring模块
const qs = require('querystring')
const bodyParser =(req, res, next)=>{
// this.res=res
//定义中间件的业务逻辑
//1.定义str字符串,用于存储客户端发送过来的请求数据
let str = ''
//2.监听req的data事件
req.on('data',(chunk)=>{
str += chunk
})
//3.监听req的end事件
req.on('end',()=>{
//str中存储了完整的请求数据
console.log(str)
//TODO:把字符串格式的请求体数据解析成对象格式
const body = qs.parse(str)
req.body = body
next()
})
}
module.exports = bodyParser
使用Express写接口
//导入express模块
const express = require('express')
//创建express的服务器实例
const app = express()
//write your code here
//配置表单解析的中间件
app.use(express.urlencoded({extended:false}))
//一定要在路由之前配置跨域cors这个中间件,从而解决接口跨域的问题
const cors = require('cors')
app.use(cors())
//导入路由模块
const router =require('./apiRouter')
//把路由模块注册到app上
app.use('/api',router)
//调用app.listen方法,指定端口号并启动web服务器
app.listen(80,function(){
console.log('express server running at http://127.0.0.1:80')
})
apiRouter.json
const express = require('express')
const router = express.Router()
//在这里挂载路由
router.get('/get',(req, res)=>{
//通过req.query获取客户端通过查询字符串,发送到服务器的数据
const query = req.query
//使用res.send()方法,向客户端响应处理的结果
res.send({
status:0, //0为处理成功,1为处理失败
msg:'GET 请求成功!', //状态描述
data:query //需要响应给客户端的数据
})
})
router.post('/post', (req, res)=>{
//通过req.body获取请求体中包含的url-encoded的格式数据
const body = req.body
//调用res.send()方法,向客户端响应结束
res.send({
status:0, //0为处理成功,1为处理失败
msg:'POST 请求成功!', //状态描述
data:query //需要响应给客户端的数据
})
})
module.exports = router
这里推荐大家我之前学习的一篇文章,这个文章内容是我在同类文章中个人认为是比较易读全面的。
MySQL学习文章
MySQL Workbench 是MySQL可视化操作软件
下载官网,全部next就行
创建数据表
UPDATA
AND关系
JWT(英文全称:JSON Web Token)是目前最流行的跨域认证解决方案。
注意:只要配置成功了express-jwt 这个中间件,就可以把解析出来的用户信息,挂载到req.user属性上
基于项目开发文档的API的开发
这里面是关于登录验证,上传文章的API项目
链接:https://pan.baidu.com/s/1Dbbs2Qat5zj8xtCY0v3zbg
提取码:qid3