用Vue+Nodejs+Axios+express连接Sqlserver做一个动态网页demo

news2024/11/27 7:41:40

文章目录

  • 一、主要工具
  • 二、流程
    • 2.1. 安装Node
    • 2.2. 新建Vue工程并启动
    • 2.3. 前后端通信
      • 2.3.1. 修改前端
      • 2.3.2. 用axios来发起请求
      • 2.3.3. 创建服务端程序


一、主要工具

  • Vue做前端页面
  • Nodejs做服务器后端(Nodejs是一个JS的运行环境,可以让JS像其它后端语言一样,脱离浏览器做一些事情,比如读写文件、创建http服务器等)
  • Axios是一个网络请求库,用于发送http请求,可以用于浏览器和nodejs
  • express基于Nodejs的JS服务端开发框架

二、流程

2.1. 安装Node

首先得安装Vue(我这边是Vue3),推荐按照Vue官网的步骤来。在装Vue之前,你应该已经安装好了Nodejs,然后通过Nodejs自带的npm去建立Vue工程。(这里安装node其实是为了下一步Vue工程的构建,而不是为了写后端服务器;若你以CDN的方式使用Vue,这步是不需要装node的,不过后面写后端还得装,所以建议一步到位)

2.2. 新建Vue工程并启动

接着在命令行运行以下命令,

npm init vue@latest

它会安装并执行Vue官方项目脚手架工具 create-vue,接着会让你做一些项目配置选择,若你不确定选哪个,直接按回车选择No即可。
在这里插入图片描述
所有选项选完后,工程目录创建,你得到的目录结构如下:
在这里插入图片描述

package.json


现代新建一个JS项目往往是从package.json开始的,就像VS中有.csproj,Qt中有.pro一样,相当于是一个工程管理文件。
不过该文件中要填充的字段太多,所以npm官方提供了 npm init 命令帮助我们快速初始化 package.json 文件,根据你选的选项不同,文件中的字段可能有所不同,所以这一步实际上就是帮你把Vue的工程目录创建出来并且往package.json中填充一些字段以供后续安装依赖。

项目创建后,可以通过以下步骤安装依赖并启动开发服务器:
在这里插入图片描述
有三条命令,我们分开讲,

cd testVue

cd(Change Directory)就是一般的命令行命令,用于切换到新建的Vue工程目录。

npm install

前面说过,npm init 是初始化工程目录并填充package.json的,这里的npm install则是安装依赖的,根据package.json中的内容,从npm服务器上将对应版本的依赖文件下载到node_modules目录下,执行之后可以看到添加包的提示,以及工程目录发生了变化:
在这里插入图片描述
在这里插入图片描述

npm run dev

用于启动开发服务器。
在这里插入图片描述
到这里为止,你已经可以通过浏览器访问默认页面了。
在这里插入图片描述
但此时还是仅限于前端的东西。

2.3. 前后端通信

要做一个动态网页,光有前端UI是不够的,还得与后端交互,以及有数据持久存储。仅仅用Vue是无法做出那样的网页的,所以需要一门后端/服务端语言,而在Nodejs的加持下,JS就可以实现那样的效果,去访问更多的计算机资源。

  • 问:那什么是后端呢?
    答:后端的主要工作是提供数据访问服务,使前端可以通过调用后端服务对数据进行增删改查。
  • 问:前端就不能提供数据访问服务吗?为什么一定要后端呢?
    答:因为这里的系统指网页系统。网页嘛,大家都知道往往是部署在开放网络中的,环境复杂,用户也可能比较多。前端嘛,可以狭隘地理解为你看到的浏览器上呈现出来的界面。如果前端可以绕开服务端程序,直接请求数据库,在安全性和性能方面都可能带来隐患。比如说,我制造大量用户访问数据库,如果没有服务端程序的过滤、分配、缓冲,可能会使数据库瘫痪。

所以我们现在需要这样一个服务端程序,它能响应前端的各种请求。当然这并不意味着我得新建一个工程,专门去开发服务端应用。事实上,如果你写过局域网socket通信程序的话,应该知道它是分服务端和客户端的,其实就是两个代码文件,一个发起连接,一个监听,编译好之后分别执行。

2.3.1. 修改前端

为了简化整个流程,只需要保留核心部分代码,先修改Vue中的App.vue,保留一个简单的交互控件即可,这边我只留了一个按钮控件,

<script>
export default {
  data() {

  },
  methods:{
    PrintInfo() {
      alert("xxxx");
    }
  }
}
</script>

<template>
  <main>
    <button @click="PrintInfo">点击显示</button>
  </main>
</template>

现在默认页面已经变成了一个按钮,点击后会弹出一个建议警示框,
在这里插入图片描述

2.3.2. 用axios来发起请求

前端发起请求,需要用到axios插件,先安装axios,
在这里插入图片描述
然后再次修改App.vue中的代码,

<script>
import axios from "axios"
export default {
  data() {

  },
  methods:{
    PrintInfo() {
      axios.get('http://localhost:8002/info')
      .then(res => {
        alert(res.data);
      });
    }
  }
}
</script>

客户端的代码,到这里就完毕了,我们点击按钮后,会向指定路径发起请求,然后在弹出框中打印出请求返回的数据。

2.3.3. 创建服务端程序

现在我们需要写服务端程序,用于监听请求并返回数据,
我们这边不用太复杂,在Vue工程目录下,新建一个server文件夹,里面添加服务端相关的代码,
在这里插入图片描述
server目录下添加一个名为server.js的文件,里面放入以下代码,

//1.导入模块
const express = require('express')
 
//2.创建服务器
let server = express()
server.use(express.urlencoded()) //中间件要写在启动文件里面
 
const cors = require('cors')
server.use(cors())
 
const user = require('./api/user.js')
 
server.use('/', user)
 
//3.开启服务器
server.listen(8002, () => {
    console.log('服务器已启动,端口号8002')
})

这边用到了几个新的插件,express、cors,都需要用npm装一下。

接着,server目录下新建一个api文件夹,并在里面添加一个名为user.js的文件,添加以下代码,

//user.js
const express = require('express');
const db = require('mssql');
const router = express.Router();
 
/* GET home page. */
router.get('/info', function (req, res, next) {
    console.log('hello world');
    res.send('hello world');
});
module.exports = router;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/153540.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用超体素上下文和基于图的优化从MLS点云对城市地区的树木进行实例分割

Abstract 在本文中&#xff0c;开发了一种用于从城市场景中的 MLS 数据集中提取树木的实例分割方法。所提出的方法利用超体素结构来组织点云&#xff0c;然后从超体素的局部上下文中提取去除趋势的几何特征。结合局部上下文的去趋势特征&#xff0c;将采用随机森林&#xff08…

Qt基于CTK Plugin Framework搭建插件框架--创建插件

文章目录一、前言二、工程搭建2.1、新建Qt工程2.2、CTK环境配置三、CTK Plugin Framework使用3.1、主函数启动插件框架3.2、插件的创建3.3、插件的使用一、前言 CTK保姆级编译教程&#xff1a;https://blog.csdn.net/Mr_robot_strange/article/details/128547331?spm1001.201…

JavaGUI:多功能计算器(五)--Swing实现双语数据包+菜单切换(完整源码)

JavaGUI&#xff1a;多功能计算器&#xff08;五&#xff09;–Swing实现双语数据包菜单切换&#xff08;完整源码&#xff09; 【背景提示】 “软件国际化”就是实现多种语言显示切换。 1.在前端网页上&#xff0c;可通过探测本地化语言环境实现自动切换&#xff1b; 2.在操…

C++ 20 原子引用 (一)

C 20 原子引用 &#xff08;一&#xff09; std::atomic_ref{} std::atomic_ref类型对其引用的对象进行原子操作。 使用std::atomic_ref 进行多线程读写时不会造成数据争用。被引用对象的生命周期必须超过std::atomic_ref 。操作std::atomic_ref 的子对象是未定义行为。 错…

Docker版RabbitMQ安装延迟队列插件及延迟队列项目应用实战

前言 在项目中经常有延迟业务处理的背景&#xff0c;此时可以借助于Rabbitmq的延迟队列进行实现&#xff0c;但Rabbitmq本身并不支持延迟队列&#xff0c;但可以通过安装插件的方式实现延迟队列 环境准备 首先确认目前项目使用的Rabbitmq的版本&#xff0c;这里博主的版本是3.…

STM32系列(HAL库)——使用ESP8266-01S物联网模块连接Onenet云平台上报DHT11温湿度

前言 本篇主要讲解如何使用ESP8266-01S物联网模块连接Onenet云平台&#xff0c;并上报DHT11模块的温湿度数据。本文单片机主控采用STM32F405RGT6&#xff0c;使用其他主控的话基本要求有2个串口&#xff0c;一个串口用于调试使用&#xff0c;另一个用于ESP模块通讯。 一、前…

SOLIDWORKS 2023工程图和出详图新功能 创建更智能化 更高精度的工程详图

工程图是传达您设计意图的重要文档&#xff0c;您设计的产品越复杂&#xff0c;越需要详细注释说明。SOLIDWORKS 2023增强的工程图和出详图功能将帮助您创建更智能化、更高精度的工程详图&#xff0c;并且扩展新功能使您的设计工作延伸到更多的业务领域。您现在可以从更高层级的…

C 程序设计教程(15)—— 选择结构程序设计练习题

C 程序设计教程&#xff08;15&#xff09;—— 选择结构程序设计练习题 该专栏主要介绍 C 语言的基本语法&#xff0c;作为《程序设计语言》课程的课件与参考资料&#xff0c;用于《程序设计语言》课程的教学&#xff0c;供入门级用户阅读。 目录C 程序设计教程&#xff08;1…

20230110配置ubuntu18.04为开机自动登录

20230110配置ubuntu18.04为开机自动登录 百度搜索&#xff1a;ubuntu 18.04 开机自动登录 https://blog.csdn.net/yang1994/article/details/124446319 通过配置文件启用/禁用Ubuntu 18.04自动登录 超级用户可以通过编辑custom.conf配置文件的方式&#xff0c;来为自己或任何其…

计算机如何存储浮点数和定点数?

1 浮点数的不精确性 能不能用二进制表示所有实数&#xff0c;然后在二进制下计算它的加减乘除呢&#xff1f; 打开Chrome Console&#xff0c;输入0.3 0.6&#xff1a; 简单加法在js算出结果居然不是准确的0.9&#xff0c;而是0.8999999999999999&#xff0c;why&#xff1…

火山语音丨AI创作惊艳四方 诸多挑战仍在路上

2022年8月&#xff0c;一幅名为《太空歌剧院》的数字画作获得冠军同时引发了巨大争议&#xff0c;AIGC&#xff08;AI产生内容&#xff1a;AI-Generated Content&#xff09;出圈的事件便频频出现在大众视野。同年11月30日OpenAI发布的聊天机器人模型ChatGPT免费开放&#xff0…

从0到1完成一个Vue后台管理项目(二十、地图涟漪、线图)

往期 从0到1完成一个Vue后台管理项目&#xff08;一、创建项目&#xff09; 从0到1完成一个Vue后台管理项目&#xff08;二、使用element-ui&#xff09; 从0到1完成一个Vue后台管理项目&#xff08;三、使用SCSS/LESS&#xff0c;安装图标库&#xff09; 从0到1完成一个Vu…

缓存穿透、布隆过滤器、布谷鸟过滤器

1.概述 缓存穿透&#xff1a; 当查询的数据在缓存&#xff08;redis&#xff09;中没有时&#xff0c;一般业务上就会去查询数据存储&#xff08;数据库&#xff09;&#xff0c;这种情况称为缓存穿透。穿透的数量太大会造成数据存储撑不住&#xff08;数据库&#xff09;而宕…

基于控制器软件需求事项进行单元测试和单元测试规范

基于需求事项的单元测试是什么&#xff1f; ​ 大多数汽车行业都遵循 ISO 26262 中定义的标准&#xff0c;这是 ISO 制定的汽车功能安全国际标准。 根据 ISO 26262 标准软件单元测试 (ISO 26262-6-9)&#xff0c;单元验证是验证要验证的单元&#xff08;功能或功能&#xff09…

智能优化算法应用:基于蜣螂优化算法的工程优化案例

智能优化算法应用&#xff1a;基于蜣螂算法的工程优化案例 文章目录智能优化算法应用&#xff1a;基于蜣螂算法的工程优化案例1.蜣螂算法2.压力容器设计问题3.三杆桁架设计问题4.拉压弹簧设计问题5.Matlab代码6.Python代码摘要&#xff1a;本文介绍利用蜣螂搜索算法&#xff0c…

MyBatis框架知识点总结

一、引言1.1 什么是框架&#xff1f;框架&#xff1a;框架使用你的&#xff0c;而不是你在使用框架的。框架让我们提供什么信息&#xff0c;配置信息&#xff0c;数据库连接用户名密码等&#xff0c;你必须提供&#xff0c;还得按照框架要要求的方式提供&#xff0c;否则你就别…

《图机器学习》-Node Embeddings

Node Embeddings一、Graph Representation Learning二、Node Embeddings&#xff1a;Encoder and Decoder三、Random Walk Approaches for Node Embeddings一、Graph Representation Learning 在传统的图机器学习中&#xff0c;依赖于手工特征工程(即由特征工程师去设计节点、…

每日一题:Leetcode54. 螺旋矩阵

文章目录 系列&#xff1a;数组专练 语言&#xff1a;java & go 题目来源&#xff1a;Leetcode54. 螺旋矩阵 难度&#xff1a;中等 考点&#xff1a;边界问题处理 思路和参考答案文章目录题目描述思路java参考代码go参考代码&#xff1a;题目描述 给你一个 m 行 n 列的矩…

力扣sql基础篇(三)

力扣sql基础篇(三) 1 查询结果的质量和占比 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # 把该列置为null的话,它就不会统计了 SELECT query_name,ROUND(sum(rating/position)/count(*),2) quality, ROUND(count(IF(rating<3,rating,null))/c…

【数据结构】—— Java实现双向链表

Java实现双向链表一、链表的概念及结构二、头指针与头结点的异同三、代码实现一、链表的概念及结构 我们在单链表中&#xff0c;有了next指针。这就使得我们查找下一个结点的时间复杂度为O(1)。可是我们要查找的是上一个结点的话&#xff0c;那最坏的时间复杂度就是O(n)了&…