五、nodejs存储图片

news2025/1/21 11:34:28

nodejs存储图片

// 静态托管和数据库创建

创建数据库

新建Public进行静态托管

新建个img的文件夹

在index.js里

// 托管静态

app.use('/public', express.static('./Public'))//托管静态资源
/**
 * 1.引入一个express框架
 * 2.在加载所有服务模块前,要先连接数据库
 * 安装body-parser中间件解析JSON数据
 */
const express = require('express');
const app = express();
const DataBase = require('./Dao/index');
const bodyParser = require('body-parser');
app.use(bodyParser.json());
DataBase.connect();//连接数据库
/**
 * 3.中间件,使用Service的接口 发送网络请求
 */
/**配置公共请求响应头 */
app.all('*', (req, res, next) => {
  // console.log('请求进来了');
  res.header("Access-Control-Allow-Origin", "*");//允许跨域域名
  res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');//允许跨域的header类型
  res.header("Access-Control-Allow-Methods", "DELETE,PUT,POST,GET,OPTIONS");//允许跨域的请求方式
  next();
})
app.use('/public', express.static('./Public'))//托管静态资源
app.use('/api/Code', require('./Service/Code'))
app.use('/api/Class', require('./Service/class_form'))
app.use('/api/Login', require('./Service/login'))
app.use('/api/User', require('./Service/user'))
app.use('/api/hot', require('./Service/hotData'))
app.use('/api/home', require('./Service/home'))
app.use('/api/text', require('./Service/textData'))
app.use('/api/course', require('./Service/courseAPI'))
/**
 * 4.规定服务的端口号
 */
app.listen(3000, () => {
  console.log('server is running at http://localhost:3000');
})

把图片存到我

Public里的imgs/course/里

访问一下可以获取到图片(这样图片就做了静态托管)

插入数据库数据

写接口连接数据库

const sql = `SELECT * FROM course_kp`
const express = require('express')
const router = express.Router()
const Dao = require('../Dao/index');
router.get('/homeData', (req, res) => {
    const sql = `SELECT * FROM course_kp`
    Dao.db.query(sql, (err, result) => {
        if (err) {
            res.send({
                code: 500,
                msg: '服务器错误'
            })
        }
        // console.log(result, 'course')
        res.send({
            code: 200,
            data: {
                small_sort: [
                    {
                        name: "实训中心",
                        icon: "icon-shoujihao",
                        path: 'practical',
                    },
                    {
                        name: "在线评测",
                        icon: "icon-pingce-copy",
                        path: 'text',
                    },
                    {
                        name: "在线考试",
                        icon: "icon-kaoshi",
                        path: 'exam',
                    },
                    {
                        name: "课程中心",
                        icon: "icon-kecheng1",
                        path: 'course',
                    },

                ],
                centent_nav_list: [
                    {
                        tab: "资源中心",
                        data: [
                            {
                                pic: "https://www.gulixueyuan.com/files/course/2021/09-28/091707333afc734597.png",
                                title: "云原生实战",
                                people: "人数:2888",
                                price: "20",
                                label: ["课程新颖", "很棒"],
                                path: 'specific_1',
                            },
                            {
                                pic: "https://sem.g3img.com/site/50028574/image/c2_20190820143554_78564.jpg",
                                title: "大数据课程",
                                people: "人数:2888",
                                price: "20",
                                label: ["老师好", "课程很新"],
                            },
                            {
                                pic: "https://7n.w3cschool.cn/attachments/image/201910/big_67708_1378947.jpg?t=1571292388",
                                title: "微信小程序微课",
                                people: "人数:2888",
                                price: "20",
                                label: ["课程新", "很棒很棒"],
                            },
                            {
                                pic: "https://img0.baidu.com/it/u=1884887629,675990136&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=500",
                                title: "鸿蒙App实战",
                                people: "人数:2888",
                                price: "20",
                                label: ["老师好", "课程很新"],
                            },
                        ],
                    },
                    {
                        tab: "绩效排名",
                        data: [
                            {
                                pic: "https://7n.w3cschool.cn/attachments/image/201910/big_67708_1378947.jpg?t=1571292388",
                                title: "微信小程序微课",
                                people: "人数:2888",
                                price: "20",
                                label: ["课程新", "很棒很棒"],
                            },
                        ],
                    },
                    {
                        tab: "教师点评",
                        data: [
                            {
                                pic: "https://7n.w3cschool.cn/attachments/image/201910/big_67708_1378947.jpg?t=1571292388",
                                title: "微信小程序微课",
                                people: "人数:2888",
                                price: "20",
                                label: ["课程新", "很棒很棒"],
                            },
                            {
                                pic: "https://img0.baidu.com/it/u=1884887629,675990136&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=500",
                                title: "鸿蒙App实战",
                                people: "人数:2888",
                                price: "20",
                                label: ["老师好", "课程很新"],
                            },
                        ],
                    },
                    {
                        tab: "实时新闻",
                        data: [
                            {
                                pic: "https://7n.w3cschool.cn/attachments/image/201910/big_67708_1378947.jpg?t=1571292388",
                                title: "微信小程序微课",
                                people: "人数:2888",
                                price: "20",
                                label: ["课程新", "很棒很棒"],
                            },
                            {
                                pic: "https://img0.baidu.com/it/u=1884887629,675990136&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=500",
                                title: "鸿蒙App实战",
                                people: "2888",
                                price: "20",
                                label: ["老师好", "课程很新"],
                            },
                            {
                                pic: "https://www.gulixueyuan.com/files/course/2021/09-28/091707333afc734597.png",
                                title: "云原生实战",
                                people: "2888",
                                price: "20",
                                label: ["课程新颖", "很棒"],
                            },
                        ],
                    },
                ],
                pic_list: [
                    {
                        pic: "https://ts1.cn.mm.bing.net/th/id/R-C.7cdcec9d832b10299997262226439d30?rik=4NYwnD4xkiVxLw&riu=http%3a%2f%2fwww.tolc.com.cn%2ffiles%2fattach%2fimages%2fcontent%2f20210225%2f16142645984866.jpg&ehk=25LMvyqTd1YKGRBSVpbxn%2fU1ZlanTZLnmHhdjqoX5OI%3d&risl=&pid=ImgRaw&r=0",

                    },

                ],
                course_list: result
            },

        })
    })

})
module.exports = router

在项目中渲染

time格式转化封装

export const convertUnixTimestampToDateString = {
    formateDateYYMMDDHHMMSS: (timestamp, offsetHours = 8) => {
        // 创建一个Date对象,此时是UTC时间  
        const date = new Date(timestamp);

        // 获取UTC时间的年、月、日、时、分、秒  
        const utcYear = date.getUTCFullYear();
        const utcMonth = String(date.getUTCMonth() + 1).padStart(2, '0');
        const utcDay = String(date.getUTCDate()).padStart(2, '0');
        const utcHours = date.getUTCHours();

        // 应用时区偏移  
        const localHours = (utcHours + offsetHours) % 24; // 转换为24小时制  
        const localMinutes = date.getUTCMinutes();
        const localSeconds = date.getUTCSeconds();

        // 如果偏移后的小时数小于0,则需要从日期中减去一天并相应调整小时数  
        if (localHours < 0) {
            date.setUTCDate(date.getUTCDate() - 1);
            localHours += 24;
        }

        // 拼接成字符串  
        const formattedDate = `${utcYear}-${utcMonth}-${utcDay} ${localHours.toString().padStart(2, '0')}:${localMinutes.toString().padStart(2, '0')}:${localSeconds.toString().padStart(2, '0')}`;
        return formattedDate;
    }
} 

js引用

//引用
import Footer from "../../components/Footer.vue";
import banner from "./components/Banner.vue";
import { reactive, toRefs, ref } from "vue";
import NavList from "./components/NavList.vue";
import axios from "axios";
import { onMounted } from "vue";
import { getApiHomeData } from "../../api/api";
import { useRouter } from "vue-router";
import { convertUnixTimestampToDateString } from "../../utils/time";


const BASEURL = "http://127.0.0.1:3000";
    const router = useRouter();
    // 获取数据
    let data = reactive({
      big_sort: [],
      small_sort: [],
      centent_nav_list: [],
      pic_list: [],
      course_list: [],
      serPicker: false,
      serColumns: [],
    });

    const active = ref(0);
    const getHomeData = async () => {
      // 获取封装的数据
      let res = await getApiHomeData();
      data.big_sort = res.data.big_sort;
      data.small_sort = res.data.small_sort;
      data.centent_nav_list = res.data.centent_nav_list;
      data.pic_list = res.data.pic_list;
      data.course_list = res.data.course_list;
      data.serColumns = data.course_list.map((item) => {
        return item.name;
      });
    };

div使用

<div class="content_hao_image" @click="course_router(item,index)">
        <img :src="BASEURL + item.pic" alt="" />
          <div class="text_top">
            {{ item.title }}
            <p>{{ item.decription }}</p>
            <div class="content_button">好课推存</div>
            <p class="p_2">
          {{
            convertUnixTimestampToDateString.formateDateYYMMDDHHMMSS(
            item.time
                  )
                }}
              </p>
            </div>
          </div>

找到vant的选择器

Vant 3 - Lightweight Mobile UI Components built on Vue

<van-popup v-model:show="showPicker" position="bottom">
  <van-picker
    :columns="columns"
    @confirm="onConfirm"
    @cancel="showPicker = false"
  />
</van-popup>
  const BASEURL = "http://127.0.0.1:3000";
    const router = useRouter();
    // 获取数据
    let data = reactive({
      big_sort: [],
      small_sort: [],
      centent_nav_list: [],
      pic_list: [],
      course_list: [],
      serPicker: false,
      serColumns: [],
    });

    const active = ref(0);
    const getHomeData = async () => {
      // 获取封装的数据
      let res = await getApiHomeData();
      data.big_sort = res.data.big_sort;
      data.small_sort = res.data.small_sort;
      data.centent_nav_list = res.data.centent_nav_list;
      data.pic_list = res.data.pic_list;
      data.course_list = res.data.course_list;
      data.serColumns = data.course_list.map((item) => {
        return item.name;
      });
    };
const onserConfirm = (current, index) => {
      console.log(current, data.course_list[index]);
      switch (data.course_list[index].name) {
        case "python课程":
          router.push("/specific_1");
          break;
        case "java课程":
          router.push("/specific_2");
          break;
        case "mysql课程":
          router.push("/specific_3");
          break;
        default:
          break;
      }
    };

如图

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

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

相关文章

MySQL是怎么保证持久性的(redo log日志相关)

Mysql中 事务的很多实现&#xff0c;都是因为有日志的支撑&#xff0c;比如binlog、undo log、redo log等 MySQL是怎么保证持久性的 持久性是指&#xff0c;事务一旦提交&#xff0c;它对数据库的改变就应该是永久性的&#xff0c;接下来的其他操作或故障不能对其有影响。In…

Java(十)——内部类

文章目录 内部类静态内部类实例内部类匿名内部类局部内部类 内部类 Java内部类是一种特殊的类定义方式&#xff0c;它允许在一个类的内部定义另一个类。 内部类可以访问其所在外部类的成员变量和成员方法&#xff0c;这使得它非常适用于封装与外部类紧密相关的私有逻辑。 内…

如何处理SSL证书过期问题?

SSL证书是网络安全的重要组成部分&#xff0c;它为网站提供了数据加密、身份验证和增强用户信任等多重保护。然而&#xff0c;SSL证书并非永久有效&#xff0c;其有效期通常为一年。当SSL证书过期时&#xff0c;网站安全性会受到影响&#xff0c;甚至可能面临安全风险。本文旨在…

实战|基于YOLOv10与MobileSAM实现目标检测与分割【附完整源码】

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

开发一个comfyui的自定义节点-支持输入中文prompt

文章目录 目标功能开发环境实现过程翻译中文CLIP编码拓展仓库地址完整代码目标功能 目前comfyui的prompt提示词输入节点 CLIP Text Encode 只支持输入英文的prompt,而有时候我们需要自己制定一些prompt,所以就得将我们想要的提示词翻译为英文后再复制粘贴到该节点的输入框中…

PMP考试难吗?考试通过率有多少?

我们通常以考试的通过率来评判一个考试的难易程度。通常通过率达到60%以上&#xff0c;这个考试就不太难&#xff1b;达到80% &#xff0c;这个考试就是不难的。 PMP考试难吗&#xff1f; 不少想要考PMP的小伙伴都会有这样的疑惑&#xff0c;首先以PMP的含金量来说&#xff0…

基于Dify的QA数据集构建(附代码)

大模型相关目录 大模型&#xff0c;包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步&#xff0c;扬帆起航。 大模型应用向开发路径&#xff1a;AI代理工作流大模型应用开发实用开源项目汇总大模…

python 内置map()函数(高效处理序列数据方法,将函数应用于一个序列的每个元素)(懒加载)

文章目录 深入解析 Python 内置函数 map()函数定义与用法基本示例 map() 与列表推导式比较&#xff08;列表推导式在语法上更加简洁&#xff0c; map() 在某些情况下执行效率更高&#xff09;示例&#xff1a;将数字转化为字符串 map() 结合 lambda 函数使用多个序列结论 深入解…

kubernetes负载均衡---MetalLB

https://github.com/metallb/metallb 参考 &#xff1a; https://mp.weixin.qq.com/s/MBOWfcTjFMmgJFWw-FIk0Q 自建的Kubernetes集群&#xff0c;默认情况下是不支持负载均衡的。当需要提供服务的外部访问时&#xff0c;可使用 Ingress、NodePort等方式。他们都存在一些问题 …

智能楼宇安防3D数据可视化平台满足日益增长的安防需求

在当今社会&#xff0c;安全是每个人和企业最为关心的问题。为满足日益增长的安防需求&#xff0c;3D可视化公司深圳华锐视点隆重推出安防平台3D可视化管理系统&#xff0c;以先进的三维技术为您的安全保驾护航。 安防平台3D可视化管理系统通过创新的三维可视化技术&#xff0c…

计算机毕业设计项目、管理系统、可视化大屏、大数据分析、协同过滤、推荐系统、SSM、SpringBoot、Spring、Mybatis、小程序项目编号1-500

大家好&#xff0c;我是DeBug&#xff0c;很高兴你能来阅读&#xff01;作为一名热爱编程的程序员&#xff0c;我希望通过这些教学笔记与大家分享我的编程经验和知识。在这里&#xff0c;我将会结合实际项目经验&#xff0c;分享编程技巧、最佳实践以及解决问题的方法。无论你是…

CCIG学术论坛|文档解析技术加速大模型训练与应用

目录 前言一、大模型训练和应用过程的关键环节面临的问题1、数据2、算力3、语料4、训练时间5、模型规模与复杂度6、部署和推理效率7、安全和隐私 二、高精准、高效率的文档解析三、文档解析技术难点四、TextIn文档解析1、算法Pipeline2、文档图像预处理算法效果3、版面分析算法…

平等未来的契机?探索通用人工智能AGI对社会平等的影响

打破知识壁垒&#xff1a;通用人工智能AGI如何助力社会平等与个人成长 ©作者|CodeDan 来源|神州问学 一&#xff0e; AGI是什么&#xff1f; AGI全称为Artificial General Intelligence&#xff0c;中文翻译过来为通用人工智能。它指的是至少在大多数任务上能与人类媲美…

开源模型应用落地-LangChain试炼-LCEL-表达式语言(一)

一、前言 尽管现在的大语言模型已经非常强大&#xff0c;可以解决许多问题&#xff0c;但在处理复杂情况时&#xff0c;仍然需要进行多个步骤或整合不同的流程才能达到最终的目标。然而&#xff0c;现在可以利用langchain来使得模型的应用变得更加直接和简单。 LCEL是什么&…

为什么说PMP考试比较简单?

PMP考试&#xff0c;说实话&#xff0c;真不算难。不信&#xff1f;听我慢慢给你分析。 PMP考试虽然考察的知识面宽&#xff0c;但很多知识的深度其实并不深。 项目经理嘛&#xff0c;就像是个通才&#xff0c;啥都得懂点&#xff0c;但啥也不用精通到专家级别。就像那概率统…

【图书推荐】《Ubuntu Linux系统管理与运维实战》

本书重点 全面学习Ubuntu系统操作&#xff0c;快速掌握Linux日常管理和运维 安装和配置、桌面环境、文件系统、文件和目录管理、用户和权限管理系统的启动和关闭、服务和进程管理、软件包管理、磁盘和文件系统管理网络管理、网络服务管理、系统和网络安全 内容简介 Linux是…

StartAI:AI扩图功能,让设计更高效

在数字设计领域&#xff0c;图像的清晰度和细节至关重要。StartAI作为领先的AI设计工具&#xff0c;不断推出创新功能&#xff0c;以满足设计师们对高质量图像处理的需求。最新推出的扩图功能&#xff0c;结合了“创成式填充”技术和“PS插件”的便捷&#xff0c;为设计师们带来…

centos7安装 hadoop集群

目录 准备集群搭建步骤1. 环境准备三台服务器IP关闭三台服务器的防火墙修改三台服务器的hostname文件修改三台服务器的hosts映射配置三台服务器之间的免密登录三台时间同步设置 2. hadoop安装资源划分3. 开始搭建hadoop集群192.168.83.144 即 hadoop1上的修改解压安装包添加环境…

Mac硬件设备系统环境的升级/更新 macOS

Mac硬件设备上进行系统环境的升级/更新macOS 1.大版本(升级)判断(比如&#xff1a;我买的这台电脑设备最高支持Monterey) 点击进入对应的大版本描述说明页查看相关的兼容性描述&#xff0c;根据描述确定当前的电脑设备最高可采用哪个大版本系统(Sonoma/Ventura/Monterey/Big Su…

线性代数|机器学习-P3乘法和因式分解矩阵

文章目录 1. 矩阵分解2. S Q Λ Q T SQ\Lambda Q^T SQΛQT3. A U Σ V T AU\Sigma V^T AUΣVT4. A LU 分解5. 矩阵的四个子空间 1. 矩阵分解 目前我们有很多重要的矩阵分解&#xff0c;每个分解对应于多个前提条件&#xff0c;分解方法&#xff0c;分解后的形状会中如下&…