node--处理一个增加上传操作和渲染页数条

2021-04-24 20:28

阅读:361

标签:生效   nat   表单   new   find   odi   删除   完全   app   

一段学习的结束

我也不知道我这是在写些什么,只是觉得学完了一些东西,就是想把它记录
一下,这样我就可以知道我是学过这一块的,要多激励自己,^^O(∩∩)O哈哈~
以下内容并不完全与标题匹配,不过以下内容综合了前面几篇的应用,并增加了
部分东西

js带码要和html代码一起看

import express from 'express'
import Advert from '../models/advert'
import formidable from 'formidable'
import config from '../config'
import { basename } from 'path'

// 创建一个路由容器,将所有的路由中间件挂载给路由容器
const router = express.Router()

router.get('/advert', (req, res, next) => {
  const page = Number.parseInt(req.query.page, 10)
  const pageSize = 5
  Advert
    .find()
    .skip((page - 1) * pageSize)
    .limit(pageSize)
    .exec((err, adverts) => {
      if (err) {
        return next(err)
      }
      Advert.count((err, count) => {
        if (err) {
          return next(err)
        }
        const totalPage = Math.ceil(count / pageSize) // 总页码 = 总记录数 / 每页显示大小
        res.render('advert_list.html', {
          adverts,
          totalPage,
          page
        })
      })
    })
})

router.get('/advert/add', (req, res, next) => {
  res.render('advert_add.html')
})

/**
 * POST /advert/add
 * body: { title, image, link, start_time, end_time }
 */
router.post('/advert/add', (req, res, next) => {
  const form = new formidable.IncomingForm()
  form.uploadDir = config.uploadDir // 配置 formidable 文件上传接收路径
  form.keepExtensions = true // 配置保持文件原始的扩展名
  form.parse(req, (err, fields, files) => {
    if (err) {
      return next(err)
    }

    const body = fields // 普通表单字段
    body.image = basename(files.image.path) // 这里解析提取上传的文件名,保存到数据库

    const advert = new Advert({
      title: body.title,
      image: body.image,
      link: body.link,
      start_time: body.start_time,
      end_time: body.end_time,
    })

    advert.save((err, result) => {
      if (err) {
        return next(err)
      }
      res.json({
        err_code: 0
      })
    })
  })
})

router.get('/advert/list', (req, res, next) => {
  Advert.find((err, docs) => {
    if (err) {
      return next(err)
    }
    res.json({
      err_code: 0,
      result: docs
    })
  })
})

// /advert/one/:advertId 是一个模糊匹配路径
// 可以匹配 /advert/one/* 的路径形式
// 例如:/advert/one/1 /advert/one/2 /advert/one/a /advert/one/abc 等路径
// 但是 /advert/one 或者 /advert/one/a/b 是不行的
// 至于 advertId 是自己起的一个名字,可以在处理函数中通过 req.params 来进行获取
router.get('/advert/one/:advertId', (req, res, next) => {
  Advert.findById(req.params.advertId, (err, result) => {
    if (err) {
      return next(err)
    }
    res.json({
      err_code: 0,
      result: result
    })
  })
})

// /advert/edit
router.post('/advert/edit', (req, res, next) => {
  Advert.findById(req.body.id, (err, advert) => {
    if (err) {
      return next(err)
    }
    const body = req.body
    advert.title = body.title
    advert.image = body.image
    advert.link = body.link
    advert.start_time = body.start_time
    advert.end_time = body.end_time
    advert.last_modified = Date.now()

    // 这里的 save 因为内部有一个 _id 所以这里是不会新增数据的,而是更新已有的数据
    advert.save((err, result) => {
      if (err) {
        return next(err)
      }
      res.json({
        err_code: 0
      })
    })
  })
})

router.get('/advert/remove/:advertId', (req, res, next) => {
  Advert.remove({ _id: req.params.advertId }, err => {
    if (err) {
      return next(err)
    }
    res.json({
      err_code: 0
    })
  })
})

export default router
{% extends "layout.html" %} {% block body %}
{% endblock %} {% block script %} {% endblock %}
{% extends "layout.html" %} 

{% block body %}
{% endblock %} {% block script %} {% endblock %}

node--处理一个增加上传操作和渲染页数条

标签:生效   nat   表单   new   find   odi   删除   完全   app   

原文地址:https://www.cnblogs.com/ygjzs/p/12233219.html


评论


亲,登录后才可以留言!