我的课程表(技术栈:Vue+node+vant+mysql,2024年最新阿里面试官的面评 都可以看吗

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Web前端全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024c (备注前端)
img

正文

‘①’,

‘②’,

‘③’,

‘④’,

‘⑤’,

‘⑥’,

‘⑦’,

‘⑧’,

‘⑨’,

‘⑪’,

‘⑫’,

‘⑬’,

],

Allcourses:‘’,

time:[“周一”,“周二”,“周三”,“周四”,“周五”,“周六”,“周日”],

bgColor:[

[“#AE91D6”,“#34CED9”,“#64B9FE”,“#AE91D6”,“#FADB36”,“#34CED9”,“#64B9FE”],

[“#F97885”,“#34CED9”,“#64B9FE”,“#AE91D6”,“#FADB36”,“#34CED9”,“#64B9FE”],

[“#F97885”,“#34CED9”,“#F97885”,“#AE91D6”,“#FADB36”,“#34CED9”,“#64B9FE”],

[“#F97885”,“#34CED9”,“#34CED9”,“#AE91D6”,“#FADB36”,“#F97885”,“#64B9FE”],

[“#F97885”,“#34CED9”,“#64B9FE”,“#34CED9”,“#FADB36”,“#34CED9”,“#64B9FE”],

[“#F97885”,“#64B9FE”,“#64B9FE”,“#AE91D6”,“#FADB36”,“#34CED9”,“#64B9FE”],

[“#F97885”,“#34CED9”,“#64B9FE”,“#AE91D6”,“#FADB36”,“#34CED9”,“#64B9FE”],

[“#F97885”,“#34CED9”,“#64B9FE”,“#AE91D6”,“#FADB36”,“#34CED9”,“#64B9FE”]

],

},

};

},

methods: {

showPopup() {

this.show = true;

},

onClickLeft() {

this.$router.back();

},

onClickRight() {

},

onChange(picker, value, index) {

Toast(当前值:${value}, 当前索引:${index});

this.weekDay = value;

}

},

created(){

this.$axios.get(“/api/ClassInfo”)

.then((data)=>{

this.classTableData.Allcourses = data.data.msg;

});

},

mounted(){

this.weekDay = 第${TodayInfo("2019/9/4").week}周;

},

computed:{

…mapState([‘allCourse’])

},

}

3.个人界面

=========================================================================

个人界面完成的比较粗糙

在这里插入图片描述

没啥技术含量

直接亮代码

<van-nav-bar

class=“header”

title=“个人中心”

left-arrow

/>

<img :src=“userInfoAvatar” alt=“” @click=“changeAvatar”>

{{userInfo.name}}

微信号:{{userInfo.account}}

<van-grid-item

v-for=“(item,index) in orderData”

:key=“index”

:icon=“item.icon”

:text=“item.title”

/>

这里主要难题是点击头像课以更换自己的头像

,更换头像页面比较随便

我尚且有一丝不好意思展示,但不得不展示

在这里插入图片描述

<van-nav-bar

title=“更换头像”

left-text=“返回”

left-arrow

@click-left=“onClickLeft”

/>

这里主要难题是点击头像课以更换自己的头像,采用的方法是用:每次更换头像时,把传上去的图骗保存到服务器,服务器,然后

在这里插入图片描述

这里写的是图片在服务器的位置(服务器有个路由专门返回头像)。(这是我个人拙略的想法)。但是这样造成一个问题,就是回来到个人中心界面的时候,更换的新照片没有显示出来,还是原来的头像,解决这个方法采用的是,每次没到更换头像后,返回时,让他自动刷新一个,还好有这个

window.location.replace(“/mine”)

返回时会自发地刷新

4.登陆界面

=========================================================================

在这里插入图片描述

<a href=“javascript:;” :class=“{current: loginMode}” @click=“dealLoginMode(true)”>登陆

<a href=“javascript:;” :class=“{current: !loginMode}” @click=“dealLoginMode(false)”>注册

<img src=“./images/hide_pwd.png” :class=“{on: pwdMode}” @click.prevent=“dealPwdMode(false)” alt=“” width=“20”>

<img src=“./images/show_pwd.png” :class=“{on: !pwdMode}” @click.prevent=“dealPwdMode(true)” alt=“” width=“20”>

<button class=“login-submit” @click.prevent=“login”>登录

5.用到地后台数据接口

==============================================================================

const express = require(‘express’);

const router = express.Router();

const conn = require(‘./…/db’);

const bcrypt = require(“bcryptjs”);

const jwt = require(“jsonwebtoken”);

/**

  • 返回头像

*/

router.get(“/albums/head_pic/*”,function (req,res,next) {

res.sendFile( “D:\Vuestudy\mycurriculum\” + “/” + req.url );

});

/**

  • @route POST api/users/test

  • @desc 返回的请求的json数据

  • @access public

*/

router.post(“/register”,(req,res)=>{

let selectSql = SELECT * FROM user_data WHERE account = '${req.body.account}';

conn.query(selectSql,function (err,result) {

if (result.length>0){

res.json({“err_code”:0,msg:“该账户已被注册”})

}else{

//加密

let User={

password:req.body.password

};

bcrypt.genSalt(10, function(err, salt) {

bcrypt.hash(User.password, salt, (err, hash)=> {

if(err) throw err;

User.password = hash;

// console.log(password);

let addSqlParams = [req.body.account,User.password,req.body.name];

let addSql = ‘INSERT INTO user_data(account,password,name) VALUES(?,?,?)’;

conn.query(addSql,addSqlParams,function (err, result) {

if(err){

res.end(“注册失败”);//如果注册失败就给客户端返回0

return;//如果失败了就直接return不会继续下面的代码

}

res.end(“注册成功”);//如果注册成功就给客户端返回1

});

});

});

}

});

});

/**$登录接口

  • @route POST api/users/login

  • @desc 返回token

  • @access public

*/

router.post(“/login”,(req,res)=>{

const account = req.body.account;

const password = req.body.password;

let selectSql = SELECT * FROM user_data WHERE account = '${req.body.account}';

conn.query(selectSql,function (err,result) {

if (result.length===0){

res.json({“err_code”:0,msg:“该账户不存在”})

}else{

console.log(result);

bcrypt.compare(password,result[0].password)

.then(isMatch =>{

if(isMatch){

const rule = {Id:result[0].Id,account:result[0].account,avatar: result[0].avatar};

jwt.sign(rule,“secret”,{expiresIn:3600},(err,token)=>{

if (err) throw err;

res.json({

success_code:true,

token:"Bearer "+token

})

});

// res.json({msg:“sucess”})

}else{

return res.json({err_code:0,msg:“密码或账号不对”})

}

})

}

});

});

/**

  • 获取个人信息

  • @type {Authenticator|Passport}

*/

const passport = require(“passport”); //引入passport中间件

router.get(“/current”,passport.authenticate(“jwt”,{session:false}),(req,res)=>{

// console.log(req);

res.json({

Id:req.user.Id,

name:req.user.name,

account:req.user.account,

avatar:req.user.avatar,

bgImg:req.user.bgImg

})

});

/**$登录接口

  • @route POST

  • @desc 更改头像

  • @access private

*/

router.post(“/changeAvatar”,passport.authenticate(“jwt”,{session:false}),(req,res)=>{

console.log(“sda”);

let base_64_url = req.body.avatar;

let fs = require(“fs”); // 引入fs模块

let path = ‘./albums/’ + ‘/head_pic/’ + req.user.account +‘.jpg’;//路径从app.js级开始找–

基础面试题

主要内容包括:HTML,CSS,JavaScript,浏览器,性能优化等等

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
account = ‘${req.body.account}’`;

conn.query(selectSql,function (err,result) {

if (result.length===0){

res.json({“err_code”:0,msg:“该账户不存在”})

}else{

console.log(result);

bcrypt.compare(password,result[0].password)

.then(isMatch =>{

if(isMatch){

const rule = {Id:result[0].Id,account:result[0].account,avatar: result[0].avatar};

jwt.sign(rule,“secret”,{expiresIn:3600},(err,token)=>{

if (err) throw err;

res.json({

success_code:true,

token:"Bearer "+token

})

});

// res.json({msg:“sucess”})

}else{

return res.json({err_code:0,msg:“密码或账号不对”})

}

})

}

});

});

/**

  • 获取个人信息

  • @type {Authenticator|Passport}

*/

const passport = require(“passport”); //引入passport中间件

router.get(“/current”,passport.authenticate(“jwt”,{session:false}),(req,res)=>{

// console.log(req);

res.json({

Id:req.user.Id,

name:req.user.name,

account:req.user.account,

avatar:req.user.avatar,

bgImg:req.user.bgImg

})

});

/**$登录接口

  • @route POST

  • @desc 更改头像

  • @access private

*/

router.post(“/changeAvatar”,passport.authenticate(“jwt”,{session:false}),(req,res)=>{

console.log(“sda”);

let base_64_url = req.body.avatar;

let fs = require(“fs”); // 引入fs模块

let path = ‘./albums/’ + ‘/head_pic/’ + req.user.account +‘.jpg’;//路径从app.js级开始找–

基础面试题

主要内容包括:HTML,CSS,JavaScript,浏览器,性能优化等等

[外链图片转存中…(img-aoLn32Q5-1713609568006)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-kNTDHZhG-1713609568006)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 7
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue+Node+MySQL是一种常见的前后端开发组合。Vue是一种流行的JavaScript框架,用于构建用户界面。Node是一个基于Chrome V8引擎的JavaScript运行时环境,用于构建服务器端应用程序。MySQL是一种关系型数据库管理系统,用于存储和管理数据。 在这个组合中,Vue通常用于构建前端界面,包括用户界面和交互逻辑。Node用于构建后端服务器,处理前端发送的请求,并与数据库进行交互。MySQL用于存储和管理数据。 在你提供的引用中,\[1\]是一个Node服务器端的代码示例,用于处理添加用户的请求,并将用户信息插入到数据库中。\[2\]是一个MySQL连接示例,用于连接到数据库并暴露连接对象供接口操作数据库时使用。\[3\]提供了一个简单的目录结构示例,展示了如何在Node工程中进行数据库操作。 综上所述,Vue+Node+MySQL是一种常见的前后端开发组合,用于构建Web应用程序。Vue负责前端界面,Node负责后端服务器,MySQL负责数据存储和管理。通过这种组合,可以实现前后端的数据交互和处理。 #### 引用[.reference_title] - *1* [vue+node+mysql项目开发(包括部署到服务器)](https://blog.csdn.net/juvialoxer/article/details/114012421)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [vue+node+mysql+nginx+express完成云服务器前后端分离搭建](https://blog.csdn.net/weixin_43480867/article/details/103255855)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值