一.//用node创建一个应用
/*
1.引入模块
2.创建服务
3.监听端口
*/
const http = require('http');
http.createServer((req,res)=>{
res.writeHead(200,{
'Content-Type':'text/plain;charset=utf-8'
})
res.end('生命不息')
}).listen(8080);
二:读取文件
读
//默认是异步的 即可以一边读取文件一边做别的事情
const fs = require('fs')
console.log('start')
fs.readFile('./1.html',(err,data)=>{
console.log(data.toString())
})
console.log('end')
const fs = require('fs')
console.log('start')
//同步读取文件 需要等待
const data = fs.readFileSync('./1.html');
console.log(data.toString())
console.log('end')
const fs = require('fs');
console.log('start sync');
//同步会阻塞
const data = fs.readFileSync('1.html','utf-8',(err)=>{
if(err){
console.error(err)
}
});
console.log('end sync');
console.log('start async');
//异步不会阻塞
fs.readFile('2.html',(err,data)=>{
if(err){
console.error(err)
}else{
console.log('end async')
}
})
写:
const fs = require('fs');
fs.writeFile('1.html','你好啊',(err)=>{
console.log(err)
})
三:事件队列:
Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列
const events = require('events');
const eventEmitter = new events.EventEmitter();
//绑定事件
eventEmitter.on('aa',()=>{
console.log('事件被触发了123');
})
setTimeout(()=>{
eventEmitter.emit('aa');
},2000);
四:Buffer对象,是为了处理二进制数据
//写入buffer
const buf = Buffer.alloc(256);
const len = buf.write('www.baidu');
console.log(buf);
//转换为字符串
console.log(buf.toString('ascii'));
console.log(len);
//将buffer转换为json
五:流
//流的步骤
// 1.创建流对象
// 2.处理流事件
//创建读取流
const fs = require('fs');
const readerStream = fs.createReadStream('src/input.txt');
let data = '';
readerStream.on('data', (chunk) => {
data += chunk;
})
readerStream.on('error', (err) => {
console.log(err);
})
readerStream.on('end',()=>{
console.log(data);
})
console.log('读取执行完了');
//创建写入流
const writerStream = fs.createWriteStream('src/out.txt');
let writeData = '这是我写入的内容';
//使用utf8格式写入数据
writerStream.write(writeData,'UTF8');
//标记文件末尾
writerStream.end();
//处理流事件
writerStream.on('finish',()=>{
console.log('写入完成');
})
writerStream.on('error',(err)=>{
console.log(err);
})
console.log('写入执行完毕了')
六:express
//注意req里面的 baseUrl是定义时候的/a,path是/a后面的所有的字符串,originalUrl是包含/a和后面的所有的字符串
//创建一个get请求
const express = require('express');
const app = express();
// app.get('/name',(req,res)=>{
// res.end("xx");
// })
// app.listen(8004,()=>{
// console.log('server start');
// })
//创建一个带参数的get请求
// app.get('/name1/:age',(req,res)=>{
// const {age} = req.params;
// res.json({
// "name":"zhangsan",
// age
// })
// })
// app.listen(8005,()=>{
// console.log('server start')
// })
//创建一个post请求
app.post('/name3',(req,res)=>{
res.send('这是post请求');
})
app.listen('8006',()=>{
console.log('server start');
})
七:路由
web服务如何处理一个请求
1.按照请求的方式来区分 根据get/post
2.通过uri即路径来区分
八:node的工具模块
path模块
//join是连接路径
//resolve是从右向左解析路径成为一个绝对路径