这是我参与8月更文挑战的第1天,活动详情查看:8月更文挑战
一、同步和异步:
fs 模块 内置模块
const fs = require('fs')
安装其他模块: npm i 模块
自定义模块: (即编写 js 文件) node 文件名 (.js 可以省略)
1. 异步(callback 回调函数)
var fs = require('fs')
fs.unlink('/tmp/shiyanlou', function (err) {
if (err) {
throw err
}
console.log('成功删除了/tmp/shiyanlou')
})
2. 同步 (没有回调函数)
var fs = require('fs')
fs.unlinkSync('/tmp/shiyanlou') // Sync 表示的是同步方法
console.log('成功删除了/tmp/shiyanlou')
注意: 同步方法执行完并返回结果后才能执行后续的代码
而异步方法采用回调函数接收并返回结果,可以立即执行后续代码。
3. 流 在命令行执行
var ws = fs.createWriteStream('./g.txt')
ws.write(str, 'utf-8')
ws.end()
ws.on('finish', () => {
console.log('写入成功')
})
二、 readFile 读取文件:
读取文件 api, 使用方法:
fs.readFile(filename,[option],callback)
方法读取文件。
readFile 同步的写法就是没有回调函数:
fs.readFileSync(filename,[options])
三、WriteFile 写入文件:
-
读取文件 api
writeFile
, 使用方法:fs.writeFile(filename,data,[options],callback) 写入内容到文件。
-
使用 http 创建一个服务器(createServer)
-
2.1 并显示一句话
使用插件:
nodemon
可监听内容更改, 在输出显示的内容改动后, 可自动重启服务器 -
2.2 显示一个网页:
res.writeHead(200,{"Content-type":"text/html;charset=utf-8"});
-
2.3 创建并启动一个服务:
-
server.js
const http = require('http')
const fs = require('fs')
const data = require('./data')
var server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-type': 'text/html;charset=utf-8' })
var nr = fs.readFileSync('./a.html', 'utf-8')
nr = nr.replace(/\{name\}/, data.name)
nr = nr.replace(/\{age\}/, data.age)
res.end(nr)
})
server.listen(2100, () => {
console.log(`listen ${ser.address().port} ...这是我的端口`)
})
请求文件 优先顺序:
.js
.json
.node
- 路由: 路径输入不同的内容 请求不同页面
const http = require('http')
const fs = require('fs')
const path = require('path')
const data = require('./data') // 请求数据 data.json
var server = http.createServer((req, res) => {
console.log(req.url)
var extname = path.extname(req.url)
//获取请求文件的路径
// 此处请求的文件都和ser.js在同级目录下,请求的a.html里面引入样式c.css时正常引,ser.js里req.url自动从html中查找需要引用文件的路径,js文件里写"./",如果css文件里引入时只写c.css js文件里
var filename = './' + req.url
if (req.url === '/favicon.ico') return
if (req.url === '/') {
console.log('/ request')
res.writeHead(200, { 'Content-type': 'text/html;charset=utf-8' })
var nr = fs.readFileSync('./a.html', 'utf-8')
nr = nr.replace(/\{name\}/, data.name)
nr = nr.replace(/\{age\}/, data.age)
res.end(nr)
} else if (req.url === '/two') {
res.writeHead(200, { 'Content-type': 'text/plain;charset=utf-8' })
res.end('这是 two request two请求')
} else if (req.url === '/aia') {
res.writeHead(200, { 'Content-type': 'text/plain;charset=utf-8' })
res.end('这是霞美丽的半仙时刻')
} else if (extname === '.css') {
res.writeHead(200, { 'Content-type': 'text/css' })
fs.createReadStream(filename).pipe(res)
} else if (extname == '.png') {
res.writeHead(200, { 'Content-type': 'image/png' })
fs.createReadStream(filename).pipe(res)
} else {
res.writeHead(200, { 'Content-type': 'text/plain;charset=utf-8' })
res.end('就是我的霞美丽')
}
})
server.listen(2100, () => {
console.log(`listen ${ser.address().port} ...这是我的端口`)
})
加油向前冲
学习路上, 注定是孤独的, 枯燥无味的,
待你破茧成蝶! 加油吧!