开源软件名称(OpenSource Name):hanyucd/vue-mall-mobile开源软件地址(OpenSource Url):https://github.com/hanyucd/vue-mall-mobile开源编程语言(OpenSource Language):JavaScript 60.7%开源软件介绍(OpenSource Introduction):vue-mall-mobile
技术栈前端:脚手架工具 vue-cli@3.0 后端:脚手架工具 koa-generator 狼叔-桑世龙写的;(狼叔说:少抱怨,多思考,未来更美好) 主体:vue + vue-router + vuex + axios + scss + koa + mongodb + mongoose + vant 其他:better-scroll + vue-awesome-swiper 效果演示
运行项目mall:前端,进入目录文件,首先 npm install 安装相关依赖。 server:后端,进入目录文件,首先 npm install 安装相关依赖,第一次运行项目,得先浏览器访问 localhost:3000,执行初始化数据导入数据库任务。 移动端 Web 页面适配方案主要使用 flex + rem 方案布局,rem 是相对于根元素,rem 定义是根元素的 font-size, 以 rem 为单位, (function (doc, win) {
var docEl = win.document.documentElement;
var resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize';
/**
* ================================================
* 设置根元素 font-size
* 当设备宽度为 375(iPhone6)时,根元素 font-size = 16px;
* ================================================
*/
var refreshRem = function () {
var clientWidth = win.innerWidth || doc.documentElement.clientWidth || doc.body.clientWidth;
if (!clientWidth) return;
var fontSize;
var width = clientWidth;
fontSize = 16 * width / 375;
docEl.style.fontSize = fontSize + 'px';
docEl.style.maxWidth = 768 + 'px';
docEl.style.margin = '0 auto';
};
if (!doc.addEventListener) return;
win.addEventListener(resizeEvt, refreshRem, false);
doc.addEventListener('DOMContentLoaded', refreshRem, false);
refreshRem();
})(document, window); Axios 请求拦截器 and 响应拦截器主要截取,请求 或 响应在被 then 或者 catch 处理之前,做些什么。我们可以把每一次请求想象成一条管道里的流过的水,
// 添加请求拦截器
axios.interceptors.request.use(function (config){
//在发送请求之前做某事
return config;
},function(error) {
//请求错误时做些事
return Promise.reject(error);
});
// 添加响应拦截器
axios.interceptors.response.use(function (response) {
//对响应数据做些事
return response;
},function (error) {
//请求错误时做些事
return Promise.reject(error);
}); 函数节流 and 函数防抖函数节流(throttle):规定在一个单位时间内,只能触发一次函数。如果这个单位时间内触发多次函数,只有一次生效。 /**
* 函数节流方法
* @param {Function} fn 延时调用函数
* @param {Number} delay 延迟多长时间
* @param {Number} atleast 至少多长时间触发一次
* @return {Function} 延迟执行的方法
*/
function throttle(fn, delay, atleast = 0) {
let timer = null; // 记录定时器
let previous = 0; // 记录上一次执行时间
return (...args) => {
let now = +new Date(); // 当前时间戳
if (!previous) previous = now; // 赋值开始时间
if (atleast && (now - previous) > atleast) {
fn.apply(this, args);
// 重置上一次开始时间为本次结束时间
previous = now;
timer && clearTimeout(timer);
} else {
timer && clearTimeout(timer); // 清除上次定时器
timer = setTimeout(() => {
fn.apply(this, args);
previous = 0;
}, delay);
}
}
} 函数防抖(debounce):在事件被触发 n 秒后再执行回调,如果在这 n 秒内又被触发,则重新计时。 前言:
Token and JWT使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的:
JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。 NodeJS JWT(json web token) 认证node 生态圈封装了一个对 jwt 操作的库(jsonwebtoken): 1. 安装
$ npm install jsonwebtoken --save
2. 导入
const jwt = require('jsonwebtoken');
const secret = 'xxx'; //撒盐:加密的时候混淆
3.创建 Token
const token = jwt.sign({ name: '123' }, secret, { expiresIn: 60 }); // 60 秒到期时间
4. 解密 token
jwt.verify(token, secret, function (err, decoded) {
if (err){
// To Do
} else {
// TO Do
}
}) 此项目用户认证流程使用 JSON Web Token(JWT)规范做前后端 token 传递,使之用于用户认证;node 使用 jsonwebtoken 库创建 & 校验 token, 前端使用 localStorage 存储后端传递过来的 token 信息;当请求后端 API 时,使用 axios 请求拦截器将存储的 token 添加到 HTTP 头信息 Authorization 字段里,若后端判断 token 失效 或 错误则返回 401 状态码,最后 axios 响应拦截器做响应处理并删除前端 localStorage 中 token。 手机号码注册,短信验证码实现
前后端分离模式下跨域读写 cookieCORS 全称是 "跨域资源共享"(Cross-origin resource sharing),它允许浏览器向跨源服务器,发出 XMLHttpRequest 请求,从而克服了 AJAX 只能同源使用的限制。 在前后端项目分离项目中,session 会丢失,原因是,服务端无法跨域写入cookie。 实现功能
屏幕截图 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论