学习Node.js的一天-内置模块(一)

215 阅读1分钟

这是我参与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 写入文件:

  1. 读取文件 api writeFile, 使用方法:

    fs.writeFile(filename,data,[options],callback) 写入内容到文件。

  2. 使用 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} ...这是我的端口`)
})

加油向前冲

学习路上, 注定是孤独的, 枯燥无味的,

待你破茧成蝶! 加油吧!