vue3 + node 实战(实现图片操作功能)总结

简介: 作用是:这样 vite 在执行 runOptimize 的时候中会使用 rollup 对 包含的 包重新编译,将编译成符合 esm 模块规范的新的包放入 node_modules 下的.vite_opt_cache中,然后配合 resolver 对 包含的包 的导入进行处理:使用编译后的包内容代替原来 qrcanvas 的包的内容,这样就解决了 vite 中不能使用 其他js包 的问题,这部分代码在 depOptimizer.ts 里。

上效果


20210120093306622.gif


演示地址

源码地址


使用的技术栈


前端


  • vite: 一个刚出的构建工具,使用过后都说好,我是使用vite 来进行构建前端项目的。如何构建项目
  • vue3: 这个也是刚出不久,许多生态也在慢慢的完善,关于vue2 升级到vue3的不同,可以查看
  • element-plus:这是element团队推出支持vue3的ui组件库,我写文章这会儿还是测试版本,只是为了体验一下,顺便提点bug(感受一下不一样的bug),哈哈
  • vue-router: 支持vue3的路由
  • scss: css 的预编译处理器
  • axios 向后台发送请求的库,既支持服务端,也支持客户端


后台


  • express:后台搭建服务的一个库,拥有良好的生态,例如:静态服务器,路由等
  • log4js: 用于日志记录
  • cors: 用于解决跨域的中间件


问题总结


element-plus form表单中 model 和 ref 的问题


描述: 在form 表单中,model 和 ref 使用相同的值,并且这个值是在setup 函数中对外导出会引起表单的值的改变,导致表单的值不正确,并且无法正确和表单赋值


解决办法:

model 和 ref 使用不一样的变量名称,详情 查看


vue3使用第三方插件需要使用对应vue版本问题


描述: 在vue 的项目中,需要使用第三方的包来实现某个功能, 使用在vue 的SFC中,会报一个警告: [Vue warn]: Component provided template option but runtime compilation is not supported in this build of Vue. Configure your bundler to alias "vue" to "vue/dist/vue.esm-bundler.js",本项目使用 qrcode.vue这个包是可以直接支持vue3的,但是需要使用vue的别名


解决办法:

如果是vite搭建项目的话,在vite.config.js中直接指定vue的别名,如:'vue': 'vue/dist/vue.esm-bundler.js',详情,查看


vue3使用js插件问题(js插件)


描述: 这个js是指原生的js,不能是使用在vue2的插件,因为vue2插件里面的对应的vue实例不一样了。会报一个 插件打包方式的错误。


解决办法:

如果是vite搭建项目的话,在vite.config.js中加入以下配置:


  optimizeDeps: {
            include: ["qrcanvas"]
        },


作用是:这样 vite 在执行 runOptimize 的时候中会使用 rollup 对 包含的 包重新编译,将编译成符合 esm 模块规范的新的包放入 node_modules 下的.vite_opt_cache中,然后配合 resolver 对 包含的包 的导入进行处理:使用编译后的包内容代替原来 qrcanvas 的包的内容,这样就解决了 vite 中不能使用 其他js包 的问题,这部分代码在 depOptimizer.ts 里。


20210120111554785.png


vue3在导入依赖问题


本人使用的是 webstorm 编辑器,在导入模块的话,会自动导入,但是导入的模块会报错,原因是,vue3是基于现代的浏览器,导入的每一个模块都需要加入后缀名


解决办法:

每一个模块手动加入后缀名


node中间件的加载顺序


const express = require('express');
const path = require('path');
// 创建一个服务
const app = express();
const {defaultLogger} = require('./../config/logger')
// 使用vue页面导航中间件,必须要放在前面,这个是针对的路由模式是history
const history = require('connect-history-api-fallback');
app.use(history({
    index: '/html/index.html',
    htmlAcceptHeaders: ['text/html', 'application/xhtml+xml'], // 不加这一行,后面有的请求会被拦截
    rewrites: [ // 匹配到api开头的,继续向下传递
        {
            from: /^\/api/,
            to: function (context) {
                return context.parsedUrl.path;
            }
        }
    ]
}));
// 使用静态资源的中间件
app.use(express.static(path.resolve(__dirname, '../public'),{
    index: ['html/index.html'],
    redirect: true,
    setHeaders: function (res, path, stat) {
        res.set("Access-Control-Allow-Origin","*")
    },
}));
// 使用cors 跨域中间件
const cors = require('cors');
app.options('*', cors()) // 预检请求
app.use(cors({
    "origin": "*", // 维护运行的的源头
    "methods": "GET,HEAD,PUT,PATCH,POST,DELETE", // 允许的请求方法名
    "allowedHeaders": ['Authorization'], // 允许的请求头
    "preflightContinue": true, // 解析完后,给下一个中间件
    "optionsSuccessStatus": 200 // 响应的结果
}))
// 使用urlencode 中间件来获取post contentType= application/x-www-form-urlencoded
app.use(express.urlencoded({extended: true}))
// 使用json 中间件来获取post contentTpe =application/json
app.use(express.json())
// .... 业务逻辑的中间件
// 使用错误中间件
app.use(require('./../middleware/errorMiddleware'));
app.listen(9011, () => {
    defaultLogger.info('服务启动了,正在监听9011端口,请请留意');
})


相关文章
|
16天前
|
数据采集 JavaScript Android开发
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
46 7
【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
5月前
|
JavaScript 前端开发 开发者
VUE 开发——Node.js学习(一)
VUE 开发——Node.js学习(一)
119 2
|
2月前
|
JavaScript 前端开发 jenkins
抛弃node和vscode,如何用记事本开发出一个完整的vue前端项目
本文探讨了在不依赖Node和VSCode的情况下,仅使用记事本和浏览器开发一个完整的Vue3前端项目的方法。通过CDN引入Vue、Vue Router、Element-UI等库,直接编写HTML文件实现页面功能,展示了前端开发的本质是生成HTML。虽然日常开发离不开现代工具,但掌握这种基础方法有助于快速实现想法或应对特殊环境限制。文章还介绍了如何用Node简单部署HTML文件到服务器,提供了一种高效、轻量的开发思路。
67 10
|
4月前
|
JavaScript 前端开发 持续交付
构建现代Web应用:Vue.js与Node.js的完美结合
【10月更文挑战第22天】随着互联网技术的快速发展,Web应用已经成为了人们日常生活和工作的重要组成部分。前端技术和后端技术的不断创新,为Web应用的构建提供了更多可能。在本篇文章中,我们将探讨Vue.js和Node.js这两大热门技术如何完美结合,构建现代Web应用。
67 4
|
6月前
|
JavaScript 前端开发
Vue、ElementUI配合Node、multiparty模块实现图片上传并反显_小demo
如何使用Vue和Element UI配合Node.js及multiparty模块实现图片上传并反显的功能,包括前端的Element UI组件配置和后端的Node.js服务端代码实现。
90 1
|
5月前
|
存储 JavaScript 前端开发
前端开发:Vue.js入门与实战
【10月更文挑战第9天】前端开发:Vue.js入门与实战
|
5月前
|
JavaScript 前端开发
Vue开发必备:$nextTick方法的理解与实战场景
Vue开发必备:$nextTick方法的理解与实战场景
393 1
|
4月前
|
JavaScript UED
"Vue实战技巧大揭秘:一招解决路由跳转页面不回顶部难题,让你的单页面应用用户体验飙升!"
【10月更文挑战第23天】在Vue单页面应用中,点击路由跳转时,默认情况下页面不会自动滚动到顶部,这可能影响用户体验。本文通过一个新闻网站的案例,介绍了如何使用Vue-router的全局前置守卫和`scrollBehavior`方法,实现路由跳转时页面自动滚动到顶部的功能,提升用户浏览体验。
181 0
|
6月前
|
前端开发 JavaScript
node接收前端上传的图片,单文件、多文件同name、多文件不同name
本文介绍了在Node.js中使用multer模块接收前端上传的图片,包括单文件上传、多文件上传(同name和不同name)以及任意类型文件上传的方法。
187 0
|
6月前
|
存储 JSON 前端开发
node使用token来实现前端验证码和登录功能详细流程[供参考]=‘很值得‘
本文介绍了在Node.js中使用token实现前端验证码和登录功能的详细流程,包括生成验证码、账号密码验证以及token验证和过期处理。
133 0
node使用token来实现前端验证码和登录功能详细流程[供参考]=‘很值得‘

热门文章

最新文章