定义数据模型

  1. import mongoose from 'mongoose'
  2. mongoose.connect('mongodb://localhost/edu')
  3. const advertSchema = mongoose.Schema({
  4. title: { type: String, required: true },
  5. image: { type: String, required: true },
  6. link: { type: String, required: true },
  7. start_time: { type: Date, required: true },
  8. end_time: { type: Date, required: true },
  9. create_time: { type: Date, default: Date.now },
  10. last_modified: { type: Date, default: Date.now }
  11. })
  12. export default mongoose.model('Advert', advertSchema)

使用mongoose操作数据库

可参考文档进行使用

  1. import express from 'express'
  2. import Advert from '../models/advert'
  3. // 创建一个路由容器,将所有的路由中间件挂载给路由容器
  4. const router = express.Router()
  5. router.get('/advert', (req, res, next) => {
  6. res.render('advert_list.html')
  7. })
  8. router.get('/advert/add', (req, res, next) => {
  9. res.render('advert_add.html')
  10. })
  11. /**
  12. * POST /advert/add
  13. * body: { title, image, link, start_time, end_time }
  14. */
  15. router.post('/advert/add', (req, res, next) => {
  16. // 1. 接收表单提交的数据
  17. const body = req.body
  18. // 2. 操作数据库
  19. const advert = new Advert({
  20. title: body.title,
  21. image: body.image,
  22. link: body.link,
  23. start_time: body.start_time,
  24. end_time: body.end_time,
  25. })
  26. advert.save((err, result) => {
  27. if (err) {
  28. return next(err)
  29. }
  30. res.json({
  31. err_code: 0
  32. })
  33. })
  34. })
  35. router.get('/advert/list', (req, res, next) => {
  36. Advert.find((err, docs) => {
  37. if (err) {
  38. return next(err)
  39. }
  40. res.json({
  41. err_code: 0,
  42. result: docs
  43. })
  44. })
  45. })
  46. // /advert/one/:advertId 是一个模糊匹配路径
  47. // 可以匹配 /advert/one/* 的路径形式
  48. // 例如:/advert/one/1 /advert/one/2 /advert/one/a /advert/one/abc 等路径
  49. // 但是 /advert/one 或者 /advert/one/a/b 是不行的
  50. // 至于 advertId 是自己起的一个名字,可以在处理函数中通过 req.params 来进行获取
  51. router.get('/advert/one/:advertId', (req, res, next) => {
  52. Advert.findById(req.params.advertId, (err, result) => {
  53. if (err) {
  54. return next(err)
  55. }
  56. res.json({
  57. err_code: 0,
  58. result: result
  59. })
  60. })
  61. })
  62. // /advert/edit
  63. router.post('/advert/edit', (req, res, next) => {
  64. Advert.findById(req.body.id, (err, advert) => {
  65. if (err) {
  66. return next(err)
  67. }
  68. const body = req.body
  69. advert.title = body.title
  70. advert.image = body.image
  71. advert.link = body.link
  72. advert.start_time = body.start_time
  73. advert.end_time = body.end_time
  74. advert.last_modified = Date.now()
  75. // 这里的 save 因为内部有一个 _id 所以这里是不会新增数据的,而是更新已有的数据
  76. advert.save((err, result) => {
  77. if (err) {
  78. return next(err)
  79. }
  80. res.json({
  81. err_code: 0
  82. })
  83. })
  84. })
  85. })
  86. router.get('/advert/remove/:advertId', (req, res, next) => {
  87. Advert.remove({ _id: req.params.advertId }, err => {
  88. if (err) {
  89. return next(err)
  90. }
  91. res.json({
  92. err_code: 0
  93. })
  94. })
  95. })
  96. export default router

使用mongoose--写接口的更多相关文章

  1. java为移动端写接口

    java作为一门后端语言,其厉害之处在于web,大家比较熟知的各种网络应用,java都能做,那么在这个移动优先的时代,如何继续发挥java的强大呢.通常是让java作为一个app的服务端,为app客户 ...

  2. 用yii2给app写接口(下)

    上一节里我们讲了如何用Yii2搭建一个能够给App提供数据的API后台应用程序.那么今天我们就来探讨下授权认证和通过API接口向服务器提交数据以及如何控制API接口返回那些数据,不能返回那些数据. 授 ...

  3. [MyBatis]DAO层只写接口,不用写实现类

    团队开发一个项目,由老大架了一个框架,遇到了DAO层不用写接口了,我也是用了2次才记住这个事的,因为自己一直都是习惯于写DAO层的实现类,所以,习惯性的还是写了个实现类.于是遇到错误了. 找不到那个方 ...

  4. JAVA写接口傻瓜(?)教程(一)

    当一个安卓开发人员/微信小程序开发者想做点什么的时候,如果他发现没有合适的接口,那么单机安卓.本地数据库emmm.没了接口就好像老人没了拐杖.盲人没了墨镜,完全可以称得上是举步维艰.生活艰难到需要自己 ...

  5. 前端必备之Node+mysql+ejs模版如何写接口

    前端必备之Node+mysql+ejs模版如何写接口 这星期公司要做一个视频的后台管理系统, 让我用Node+mysql+ejs配合写接口, 周末在家研究了一下, 趁还没来具体需求把研究内容在这里分享 ...

  6. node+pm2+express+mysql+sequelize来搭建网站和写接口

    前面的话:在这里已经提到了安装node的方法,node是自带npm的.我在技术中会用es6去编写,然后下面会分别介绍node.pm2.express.mysql.sequelize.有少部分是摘抄大佬 ...

  7. 跨域的案例 以百度接口/手写接口为例,还有jQuery写法

    仅在js部分输入即可 百度接口的案例 <script> function fn(data){ console.log(data) } </script> <script ...

  8. 【转载】php如何给APP端写接口

    如何写好接口 目的:清楚明白所写接口的用途 安全性:做好接口的安全性,防止接口数据泄露,做好必要的参数加密措施 按需分配: 接受值和返回值要实用,不接受和返回不需要的数据,返回值返回什么应与使用者时时 ...

  9. 使用python requests库写接口自动化测试--记录学习过程中遇到的坑(1)

    一直听说python requests库对于接口自动化测试特别合适,但由于自身代码基础薄弱,一直没有实践: 这次赶上公司项目需要,同事小伙伴们一起学习写接口自动化脚本,听起来特别给力,赶紧实践一把: ...

  10. Java后端开发工作 - 写接口

    我在公司的工作内容是,对于一个BS应用,负责服务器端开发工作,Java语言.与前端开发人员合作,最终提供给前端RESTFUL接口,保证页面正常响应. 经验之谈 一个接口可以理解为一个业务逻辑,一个业务 ...

随机推荐

  1. 基于 H5和 3D WebVR 的可视化虚拟现实培训系统

    前言 2019 年 VR, AR, XR, 5G, 工业互联网等名词频繁出现在我们的视野中,信息的分享与虚实的结合已经成为大势所趋,5G 是新一代信息通信技术升级的重要方向,工业互联网是制造业转型升级 ...

  2. 将Spring实战第5版中Spring HATEOAS部分代码迁移到Spring HATEOAS 1.0

    最近在阅读Spring实战第五版中文版,书中第6章关于Spring HATEOAS部分代码使用的是Spring HATEOAS 0.25的版本,而最新的Spring HATEOAS 1.0对旧版的AP ...

  3. 大话IDL编程之函数功能调用(envi_doit、ENVIRaster、ENVITask)

    2020年2月1日.好长时间没更新博客,还真有点不习惯.受新型冠性病毒的影响,平时街上熙熙攘攘的人流了无踪影,2020的春节竟然来的如此冷清.为响应“呆在家里就是做贡献的号召”,在家一宅就是十多天.闲 ...

  4. 业余无线电A类考试准备笔记

    在线模拟自测地址:https://liunan.github.io/crac/ 共361题,到LK0074 1004/2890行 Key Word: 要合法 要服从管理 Note: 无线电管理 最高法 ...

  5. Yandex Big Data Essentials Week1 Unix Command Line Interface File System exploration

    File System Function In computing, a file system or filesystem is used to control how data is stored ...

  6. VFP调用API来控制USB摄像头,实现拍照或录像

    *--前提:VFP7.0以上;Windows 2K及以上*--控件:AVICAP32.DLL *--定义:一般放到主程序或表单(集)的Load事件中Public WM_CAP_DRIVER_DISCO ...

  7. python xlrd操作

    python里面的xlrd模块详解(一)   那我就一下面积个问题对xlrd模块进行学习一下: 1.什么是xlrd模块? 2.为什么使用xlrd模块? 3.怎样使用xlrd模块? 1.什么是xlrd模 ...

  8. Linux监控-历史细项数据回溯

    Linux监控数据回溯 网络服务监控 应用场景: lvs 后端内网端机器网络波动监控: nginx 80.443端口连接监控: mysql 连接监控 以上为抛砖引玉,根据环境安装到监控工具(open ...

  9. java开发规范学习

    from 慕课网-明明如月-<阿里巴巴的Java开发手册> Integer缓存问题分析 1, Integer缓存[-128, 127]的数字,除此之外,将通过new创建. Long也是缓存 ...

  10. 学习 Vim 命令总结

    学习 Vim 命令总结 可以使用 vscode-vim 扩展,但是要注意一些ctrl+字母的快捷键会无效,必须去掉冲突的快捷键 esc 回到普通模式 i 普通模式进入插入模式 : 进入命令模式 :wa ...