node--处理一个增加上传操作和渲染页数条
2021-04-24 20:28
标签:生效 nat 表单 new find odi 删除 完全 app 我也不知道我这是在写些什么,只是觉得学完了一些东西,就是想把它记录 js带码要和html代码一起看 node--处理一个增加上传操作和渲染页数条 标签:生效 nat 表单 new find odi 删除 完全 app 原文地址:https://www.cnblogs.com/ygjzs/p/12233219.html一段学习的结束
一下,这样我就可以知道我是学过这一块的,要多激励自己,^^O(∩∩)O哈哈~
以下内容并不完全与标题匹配,不过以下内容综合了前面几篇的应用,并增加了
部分东西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 %}
{% extends "layout.html" %}
{% block body %}
{% for item in adverts %}
序号
标题
图片
链接
开始时间
结束时间
点击次数
操作
{% endfor %}
0
{{ item.title }}
{{ item.link }}
{{ item.start_time }}
{{ item.end_time }}
1
编辑
删除
上一篇:web常见问题:为什么要做自动化测试?---什么样的用例会选择转化为自动化?--两个项目如何分配时间?--接口或者自动化测试时间如何分配?要不要把功能用例全部转化成自动化?
下一篇:nodejs-mime类型
文章标题:node--处理一个增加上传操作和渲染页数条
文章链接:http://soscw.com/index.php/essay/79100.html