这周学习的主要内容是包括Nodejs、Es6、koa、Ajax等的基础知识,在学习的时候我是边看视频边做写代码,对于很多的知识点还是没有掌握,觉得好像只是目前知道有个什么东西,真正应用的可能会更差。
那我就这周我理解了的知识点做一下总结。
Nodejs
Node.js是一个基于ChromeV8引擎的JavaScript运行环境。
是让JavaScript 运行在服务端的开发平台。
服务器的搭建
最先是引入HTTP协议
const http=require('http');
再利用createServer函数搭建服务器和监听端口
var server=http.createServer(function(req,res){
});//req是请求 res是回应
server.listen(8081);
关于GET和POST数据的获取
GET请求被镶在路径中,那么我们获取他可以利用urlLib
get
const urlLib=require('url');//先引入
var obj=urlLib.parse(req.url,true);//用来更加标准化数据
var url=obj.pathname; //pathname属性由URL的整个路径部分组成
const GET=obj.query;
post
var str='';//因为POST是分布传输
req.on('data',function(data){
str+=data;
})
req.on('end',function(){
const POST=querystring.parse(str);
console.log(url,GET,POST);
关于fs
1、关于文件的请求
const fs=require('fs');//引入fs
var file_name='./www'+url;
fs.readFile(file_name,function(err,data){
if(err){
res.write('404');
}
else
{
res.write(data);
}
res.end();
})
2、fs中一些方法的使用
stat 检测是目录还是文件
fs.stat('文件地址',(err,data)=>{
if(err)
{
console.log(err);
return;
}
console.log(`是文件 : ${data.isFile()}`);
console.log(`是目录 : ${data.isDirectory()}`);
})
mkdir创建目录
fs.mkdir('文件地址',(err)=>{
if(err)
{
console.log(err);
return;
}
console.log('创建成功');
writeFile创建写入文件
fs.writeFile('文件地址','写入的内容',(err)=>{
if(err)
{
console.log(err);
return;
}
console.log('写入成功');
appendFile追加文件
fs.appendFile('文件地址','写入文件的代码',(err)=>{
if(err)
{
console.log(err);
return;
}
console.log('appendFile写入成功');
readFile读取文件
fs.readFile('文件地址',(err,data)=>{
if(err)
{
console.log(err);
return;
}
console.log(data);
console.log(data.toString());//**buffer转string**
})
rename重命名文件&移动文件
fs.rename('./css/index.css','./html/index.css',(err)=>{
if(err)
{
console.log(err);
return;
}
console.log('移动文件成功');
rmdir删除目录 unlink删除文件
fs.unlink('./aaa/index.html',(err)=>{
if(err)
{
console.log(err);
return;
}
console.log('删除目录成功');
}) */
fs.rmdir('./aaa',(err)=>{
if(err)
{
console.log(err);
return;
}
console.log('删除目录成功');
})
ES6的基础语法
let和const
var的缺点:
- 可重复声明
- 函数级作用域
let和const都是块级作用域(就是在{}里边起作用),const是声明常量
解构函数
注意:
- 两边的结构必须是一样的
- 右边必须是一个合法的东西
- 赋值解构必须同时进行
箭头函数
注意点:
- 若只有一个参数()可以不写
- 若只有一个语句并且是return{}也可不写
- 可以起到修正this的作用
koa
cnpm install --save koa//安装koa框架
query与 querystring
query:返回的是格式化好的参数对象。 querystring:返回的是请求字符串。
Async 、Await和Promise 的使用
async 是让方法变成异步。
await 是等待异步方法执行完成。
async 会将其后的函数的返回值封装成一个 Promise 对象,而 await 会等待这个 Promise 完成,并将其 resolve 的结果返回出来。
Koa 路由
路由就是根据不同的 URL 地址,加载不同的页面实现不同的功能。
const Koa = require('koa');
const router = require('koa-router')();
const app = new Koa();
router.get('/', function (ctx, next) { ctx.body="Hello koa"; })
app.use(router.routes()); //作用:启动路由 app.use(router.allowedMethods());
app.listen(3000,()=>
{ console.log('starting at port 3000');
});
上面是koa给我的大概的感觉,剩下东西都是在这个大体的框架上进行补充
koa的动态路由
router.get('/product/:aid',
async (ctx)=>{ console.log(ctx.params);
//{ aid: '123' } //获取动态路由的数据 ctx.body='这是商品页面'; })
就是在地址的就面加上:aid就能实现
中间件
是匹配路由之前或者匹配路由完成做的一系列的操作
分类
- 应用级中间件
- 路由级中间件
- 错误处理中间件
- 第三方中间件
koa中的art-template 模板引擎
npm install --save art-template
npm install --save koa-art-template
const Koa = require('koa');
const render = require('koa-art-template');
const app = new Koa();
render(app, { root: path.join(__dirname, 'view'), //视图的位置
extname: '.art', //后缀名
debug: process.env.NODE_ENV !== 'production' });//是否开启调试模式
app.use(async function (ctx){ await ctx.render('user');
});
app.listen(3000);