🔥Node系列学习之Node基础(二)

244 阅读3分钟

这是我参与更文挑战的第8天,活动详情查看:更文挑战

一点随想,不吐不快~

今天读了张鑫旭前辈的《学不进去,没时间学怎么办?》,深有感触,简单说一下。

我觉得这篇文章是值得我反复拜读的,目前只是粗浅看了两遍,简单说一下非常有感触的。文章中说:” 学习专业技术这件事情,唉……就像硬着头皮喝了一碗白开水,回头一看,麻鸭,还有一缸白开水要喝,而且是司马光砸缸救人那么大的一口缸。这白开水淡而无味,量又大,而且喝了几碗啥效果也看不到,想了想,还是去看剧玩游戏有意思,最终表现为有心想学,无力学习。

怎么说呢,我的想法是: 如果我们在舒适区的话,我们随心意喝果汁,喝牛奶,喝点小酒,喝很多很多,可是,如果我们在炎炎夏日,我们在30多度的高温闷热环境下渴了很久,如果此时有一杯白开水摆在你的面前,你是不是会觉得白开水就是世间最美味的饮品?可能换个环境,或者你回到家后有饮料,有啤酒,但,至少在那时,白开水对我们来说,便是最需要的,最美味的。换种想法说呢,因为喝了白开水,我们才撑到有机会去喝饮料。所以说了这么多呢,就是想说: 学习如同饮白开水,平淡无味,但可解困境忧愁。常饮之,浇焦愁。

开始正文

接上篇基础文章 《Node系列学习之Node基础》 ,基础环境已经搭建好。

路由处理

创建一级目录 src ,并在src下创建 blog.jsuser.js

blog.js

const { getList } = require('../controller/blog')
const { SuccessModel, ErrorModel } = require('../model/resModel')
const handleBlogRouter = (req, res) => {
  const method = req.method
  // 获取博客列表
  if (method == 'GET' && req.path == '/api/blog/list') {
    const author = req.query.author || ''
    const keyword = req.query.keyword || ''
    const listData = getList(author, keyword)
    return new SuccessModel(listData)
  }
  // 获取博客详情
  if (method == 'GET' && req.path == '/api/blog/detail') {
    return {
      msg: '这是获取博客详情的接口'
    }
  }
  // 新建一篇博客
  if (method == 'POST' && req.path == '/api/blog/new') {
    return {
      msg: '这是新建博客的接口'
    }
  }

  // 更新一篇博客
  if (method == 'POST' && req.path == '/api/blog/update') {
    return {
      msg: '这是更新博客的接口'
    }
  }

  // 删除一篇博客
  if (method == 'POST' && req.path == '/api/blog/del') {
    return {
      msg: '这是删除博客的接口'
    }
  }
}

module.exports = handleBlogRouter

user.js

const handleUserRouter = (req, res) => {
  const method = req.method

  // 登录
  if (method == 'POST' && req.path == '/api/user/login') {
    return {
      msg: '这是登陆的接口'
    }
  }
}
module.exports = handleUserRouter

返回模型处理

src 下新建 model 文件夹, 新建resModel.js

resModel.js

class BaseModel {
  constructor(data,message) {
    if(typeof data == 'string') {
      this.message = data
      data = null
      message = null
    }
    if(data) {
      this.data = data
    }
    if(message) {
      this.message = message
    }
  }
}

class SuccessModel extends BaseModel {
  constructor(data,mesage) {
    super(data, message)
    this.errno = 0
  }
}
class ErrorModel extends BaseModel {
  constructor(data,message) {
    super(data,message)
    this.errno = -1
  }
}
module.exports = {
  SuccessModel,
  ErrorModel
}

controller来返回数据

新建 controller文件夹,与model同级, controller下新建 blog.js

controller/blog.js

const getList = (author, keyword) => {
  // 返回mock数据
  return [
    {
      id: 1,
      title: '标题XXX',
      content: '内容A',
      createTime: 1623165670787,
      author: 'Tmier1'
    },
    {
      id: 2,
      title: '标题LLL',
      content: '内容B',
      createTime: 1623165731256,
      author: 'Tmier2'
    }
  ]
}
module.exports = {
  getList
}

然后更新下app.js

app.js

const querystring = require('querystring')
const handleBlogRouter = require('./src/router/blog.js')
const handleUserRouter = require('./src/router/user.js')
const serverHandle = (req, res) => {
  res.setHeader('Content-Type', 'application/json')

  // 获取path
  const url = req.url
  req.path = url.split('?')[0]

  // 解析 query
  req.query = querystring.parse(url.split('?')[1])

  // 处理 blog 路由
  const blogData = handleBlogRouter(req, res)
  if (blogData) {
    res.end(JSON.stringify(blogData))
    return
  }
  // 处理 user 路由
  const userData = handleUserRouter(req, res)
  if (userData) {
    res.end(JSON.stringify(userData))
    return
  }
  // 未命中路由, 返回404
  res.writeHead(404, {"Content-Type": "text/plain"})
  res.write("404 Not Found\n")
  res.end()
}
module.exports = serverHandle

OK,今天就先到这了,明天继续学习Node~