技能学习:学习使用Node.js + Vue.js,开发前端全栈网站-4.使用axios,并创建接口上传数据到mongodb数据库

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 根据我的业务范围,设想网站内容分为三类,设计、开发、小程序,设计中有二级分类平面设计、UI设计,平面设计又有三级分类包括VI设计、名片设计、LOGO设计…之后网站发布的不管是文章还是合作订单,全部归属到这些类别中,这样就需要用到数据的关联。

根据我的业务范围,设想网站内容分为三类,设计、开发、小程序,设计中有二级分类平面设计、UI设计,平面设计又有三级分类包括VI设计、名片设计、LOGO设计...之后网站发布的不管是文章还是合作订单,全部归属到这些类别中,这样就需要用到数据的关联

1.进入思路,做出分类页面

在这里插入图片描述
首先设置分类接口,后续其他接口都可以方便关联此接口。同时,设置二级分类时也需要用到关联,分类的一套接口实现后,我们就基本学会了接口的创建和数据的上传。
第一步,创建分类页面CatogorySet.vue。

常见的英文翻译是class,item等,但我们书写的代码中这些词非常常见,为了避免程序的错误和视觉的难以区分,一般以“类别category”来进行分类的命名。什么时候用单数还是复数看我们自己喜好。

命名使用驼峰命名法,名字为设置,因为后续修改也用这个页面。
下方代码为CatogorySet.vue页面,其中包括:element-ui表单、vue的model双向绑定和form表单的submit提交事件。

<template>
    <div>
        <h1>创建分类</h1>
        <el-form label-width="80px" style="margin-top:20px;" @submit.native.prevent="save">
            <!-- submit事件中使用提交方法save,native是找到js原生表单,prevent是指阻止提交时默认跳转页面 -->
            <el-form-item label="分类名">
                <el-input v-model="model.name"></el-input>
                <!-- 双向绑定model -->
            </el-form-item>
            <el-form-item>
                <el-button type="primary" native-type="submit">保存</el-button>
            </el-form-item>
        </el-form>
    </div>
</template>
<script>
export default {
    data(){
        return {
            model: {}
        }
    },
    methods: {
        save(){
            //这里放axios方法,用来提交数据
        }
    }
}
</script>

在router的index.js引入路由CategorySet.vue。
在这里插入图片描述

2.安装axios并使用,编写提交方法

终端输入:

cd admin
npm i axios

在这里插入图片描述
此时安装axios完成。
为了代码的清晰,避免main.js混乱,专门在main.js同级给axios创建一个js文件存放axios的接口,名为http.js,后在main.js引入。
引入axios包,同时创建一个axios实例,发送地址为服务器端server的admin/api接口下,此处直译为admin后台的api接口,稍后在服务端创建此地址。
http.js:

// 引入axios
import axios from 'axios'

// 创建axios实例,添加api路径
const http = axios.create({
    baseURL:'http://localhost:3000/admin/api'
})

// 将文件变量导出,导出到main.js
export default http

main.js:
在这里插入图片描述
此时http实例已经在vue实例属性中,我们可以直接在方法中用this.$http使用axios。
回到CategorySet.js,提交数据我们用POST方法:
在这里插入图片描述
方法已经写好,紧接着我们要到服务端server中创建接口,创建好后再到save方法里修改。

3.创建接口

终端新建页面输入:

cd server
npm run serve

此时我们进入到server端,什么都没有,我们要安装一些常用的模块,最终使用方法就与server一样了。
(1)同时安装三个模块包:express(NodeJS最流行的轻量web开发框架),mongoose(连接到mongodb数据库的模块)cors(允许跨域的模块)
终端再次新建页面,输入:

cd server
npm i express@next mongoose cors

在这里插入图片描述
(2)安装完成后,到server的index.js文件中引入express框架,同时app引用express实例。
使用express实例启动项目,监听3000端口。
index.js:

const express = require('express')

const app = express()

app.listen(3000, () => {
    console.log('http://localhost:3000');
})

(3)此时我们要创建上面的admin/api接口,把接口放入路由,定义地址。因为admin、web端的接口路由如果都写在index.js就会非常乱,所以把两端的接口路由分开存放在server端的routes。
创建routes文件夹,在routes中再创建两个文件夹,分别是admin和web,用于存放接口文件,再在admin中创建一个index.js文件,此index.js为具体路由编写位置。
在这里插入图片描述
routes/admin/index.js中,导出一个函数app,这个app的内容来源于最外层server的index.js中的app,给app设置路由。index.js:

module.exports = app => {
    // 要想使用express,该文件就需要引入express
    const express = require('express')

    // 定义路由方法,将我们定义的路由挂载到express
    const router = express.Router()

    // router挂载post方法,因为表单传值时用的就是post传值
    // 接口地址是categories,接收的是分类功能(创建分类、修改分类、查询分类列表)的操作
    // 之后其他功能实现与此模板相同,与此功能平级
    router.post('/categories', async(req, res) => {
        // 在里边放该接口的具体操作,所有操作同级放置

    })

    // 定义“admin/api”路由方法,挂载存入到router
    app.use('/admin/api', router)
}

将admin接口路由引入server的index.js,由于引用的内容为函数,所以我们要执行这个admin接口并传值。写法:
在这里插入图片描述

4.接口使用mongodb数据库

我们编写接口将数据传输到数据库,把数据库调用语句写到下图位置:
在这里插入图片描述
(1)引入mongoose插件
在创建接口时一并下载了mongoose(连接mongodb数据库的模块插件)这时候我们就要把数据库引入到项目中了。
创建文件夹和文件plugins/db.js在server文件夹:
在这里插入图片描述
在server下的index.js中引入db.js:
在这里插入图片描述
在db.js中引入该插件,与创建接口的书写方法类似,都使用到主文件中的app内容:

module.exports = app =>{
    // 引入mongoose
    const mongoose = require('mongoose')

    // 使用mongoose方法连接mongodb数据库
    // 格式为mongodb:数据库地址:端口号/数据库名
    // 数据库名自动创建
    mongoose.connect('mongodb://127.0.0.1:27017/node-mine',{
        // 必加参数
        useNewUrlParser: true
    })
}

此时app没有呗使用到,但后期我们有可能会使用。到此插件写好了。
(2)建立数据模型,方便调用数据库
建立分类功能的数据模型,稍后接口传值时直接调用该模型。server下创建models文件夹,再创建Category.js模块文件。
在这里插入图片描述
Category.js:

// 引入mongoose插件,插件db.js已经用require引入到server的最高层文件index.js,所以可以直接引用
const mongoose = require('mongoose')

// 使用mongoose的架构方法定义此数据表category,定义字段和类型
const schema = new mongoose.Schema({
    name: { type: String }
})

// 导出mongoose模型
module.exports = mongoose.model('Category', schema)

此时我们就可以在接口调用模型进行上传信息到数据库了。

(3)引入模型到admin/api接口
找到该接口文件,server/routes/admin/index.js,引入模型:
在这里插入图片描述
(4)操作接口,调用数据库模型进行信息上传。
在接口操作处编写接收信息并上传的命令。
在这里插入图片描述

        // 数据来源是接受到的req中的body
        // 为避免阻塞,要用异步操作,故加入await
        const model = await Category.create(req.body)
        // 接收返回值
        res.send(model)

这里由于我们是从admin端上传信息到server端,所以需要跨域,需要用到之前下载的cors跨域模块包。同时前端数据接收的是json数据,故引入express的json方法。都在server下主文件index.js中引入。
在这里插入图片描述
到这里后台接口就已经完成,此时到前端使用axios发起接口请求测试。

5.使用axios发起接口请求

在这里插入图片描述
回到我们之前的save方法,将方法同样改为异步请求:

methods: {
    async save(){
        // 这里放axios方法,用来提交数据
        const res = await this.$http.post('categories', this.model)
        console.log(res)
        // 操作完成后跳转到categories地址
        this.$router.push('/categories/list')
        // 提示信息
        this.$message({
            type: 'success',
            message: '保存成功'
        })
    }
}

测试:在这里插入图片描述
成功跳转到categories/list
在这里插入图片描述
注意上面server/routes/admin/index.js文件中异步接收文件时我写了两个res,测试时我发现了这个问题并改正了,但代码已经写好就不改图了,大家查看文章时请跳过这个问题。
在这里插入图片描述
到此该功能就已经实现了,这篇比较长,我们下篇再做list页面和相关查询接口,同时设置子分类实现数据的关联。

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
2月前
|
存储 NoSQL MongoDB
【赵渝强老师】MongoDB写入数据的过程
在MongoDB数据更新时,WiredTiger存储引擎通过预写日志(Journal)机制先将更新写入日志文件,再通过检查点操作将日志中的操作刷新到数据文件,确保数据持久化和一致性。检查点定期创建,缩短恢复时间,并保证异常终止后可从上一个有效检查点恢复数据。视频讲解及图示详细说明了这一过程。
96 23
【赵渝强老师】MongoDB写入数据的过程
|
1月前
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
61 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
1月前
|
人工智能 JavaScript 关系型数据库
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
103 14
【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
|
1月前
|
人工智能 JavaScript 安全
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
112 13
【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
|
6天前
|
JavaScript 前端开发 API
管理数据必备;侦听器watch用法详解,vue2与vue3中watch的变化与差异
一篇文章同时搞定Vue2和Vue3的侦听器,是不是很棒?不要忘了Vue3中多了一个可选项watchEffect噢。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
6天前
|
存储 数据采集 供应链
属性描述符初探——Vue实现数据劫持的基础
属性描述符还有很多内容可以挖掘,比如defineProperty与Proxy的区别,比如vue2与vue3实现数据劫持的方式有什么不同,实现效果有哪些差异等,这篇博文只是入门,以后有时间再深挖。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
2月前
|
JavaScript 前端开发 jenkins
抛弃node和vscode,如何用记事本开发出一个完整的vue前端项目
本文探讨了在不依赖Node和VSCode的情况下,仅使用记事本和浏览器开发一个完整的Vue3前端项目的方法。通过CDN引入Vue、Vue Router、Element-UI等库,直接编写HTML文件实现页面功能,展示了前端开发的本质是生成HTML。虽然日常开发离不开现代工具,但掌握这种基础方法有助于快速实现想法或应对特殊环境限制。文章还介绍了如何用Node简单部署HTML文件到服务器,提供了一种高效、轻量的开发思路。
74 10
|
2月前
|
缓存 NoSQL JavaScript
Vue.js应用结合Redis数据库:实践与优化
将Vue.js应用与Redis结合,可以实现高效的数据管理和快速响应的用户体验。通过合理的实践步骤和优化策略,可以充分发挥两者的优势,提高应用的性能和可靠性。希望本文能为您在实际开发中提供有价值的参考。
69 11
|
4月前
|
缓存 JavaScript UED
Vue3中v-model在处理自定义组件双向数据绑定时有哪些注意事项?
在使用`v-model`处理自定义组件双向数据绑定时,要仔细考虑各种因素,确保数据的准确传递和更新,同时提供良好的用户体验和代码可维护性。通过合理的设计和注意事项的遵循,能够更好地发挥`v-model`的优势,实现高效的双向数据绑定效果。
201 64
|
2月前
|
人工智能 JavaScript 前端开发
一段 JavaScript 代码,集成网站AI语音助手
根据本教程,只需通过白屏化的界面操作,即可快速构建一个专属的AI智能体。

热门文章

最新文章

  • 1
    Vue中的axios深度探索:从基础安装到高级功能应用的全面指南
    167
  • 2
    JavaScript 使用axios库发送 post请求给后端, 给定base64格式的字符串数据和一些其他参数, 使用表单方式提交, 并使用onUploadProgress显示进度
    655
  • 3
    若依修改,若依如何发送请求---王清江07,axios的请求在request.js文件中,若依发送GET请求,必须用param
    296
  • 4
    axios发送post请求,如何接受和返回一个axios的字段,解决bug的方法,困难的事情先从简单做起,先从发送一个axios的post请求做起,解决方法查别人的资料,查看F12看network就行
    64
  • 5
    文本,前后端数据交互,简单请求,如何去给data数据赋值,在mounted()里赋值,利用axios发送的请求,res就是数据集,就是后端的数据,this.users = res.data.data
    63
  • 6
    Request failed with status code 400,使用axios.post要发送参数,认真比对原项目,看看有没有忘记什么?
    142
  • 7
    vue3 在 watchEffect 里中断未完成的 axios 请求(只保留最后一次请求的方法---连续点击查询按钮的优化)
    194
  • 8
    前后端数据交互.js文件的axios的写法,想要往后端发送数据,页面注入API,await的意思是同步等待服务器数据,并返回,axios注入在其他页面,其他页面调用的时候,同步作用
    73
  • 9
    前后端数据交互,API风格组合式API和选项式API,setup是一个标识,组合式编写的意思,使定义count.value的值自增的写法,组合式API使用axios的写法,ref定义响应数据写法
    51
  • 10
    网页设计,若依项目修改(It must be done)02------axios封装后发get请求,axios请求的位置在呢?
    66