赞
踩
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
const cors = require(‘cors’);
const app = express();
app.use(cors());
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(require(‘./router/upload’));
app.listen(3000, () => {
console.log(‘running: http://127.0.0.1:3000’);
});
// 文件上传
// 服务端(听懂即可):需要使用multer模块
// 客户端(掌握):只需要使用post请求,发送formdata类型的数据即可
#### upload核心代码:
const router = require(‘express’).Router();
const multer = require(‘multer’);
const path = require(‘path’);
// 获取文件的扩展名
console.log(path.extname(‘1.png’));
const storage = multer.diskStorage({
// 用来指定文件的位置
destination(req, file, cb) {
cb(null, ‘./public/img’);
},
// 用来设置文件的名字
filename(req, file, cb) {
// console.log('file: ', file);
const filename = Date.now() + path.extname(file.originalname);
cb(null, filename);
},
});
// {
// fieldname: ‘myfile’, 上传时定义的名字
// originalname: ‘head.png’, 图片名字
// encoding: ‘7bit’, 编码格式
// mimetype: ‘image/png’ 文件类型
// }
const upload = multer({
// 使用dest选项无法修改文件的名,文件名默认是一个长度为32位的随机值
// dest: ‘./public/img’,
storage: storage,
// 文件上传限制:单位字节
limits: { fileSize: 1024 * 1024 * 2 },
// 文件过滤:决定哪些文件可以上传,哪些文件跳过
// fileFilter: function (req, file, cb) {
// if (file.mimetype.startsWith(‘image’)) {
// cb(null, true); // 接收这个文件
// } else {
// cb(null, false); // 拒绝这个文件
// }
// },
});
// multer模块是用来专门处理文件上传的,只处理multipart/form-data类型的数据
// 使用formdata可以传递文本信息,也可以传递文件数据
// 如果传递文本数据,会把参数数据保存在req.body中
// 如果传递文件数据,会把参数数据保存在req.file 或者 req.files 中
// 使用multer模块,会向req对象上添加body和 file或者files属性
// req.body 用来获取文本信息
// req.file 单个文件上传的信息 upload.single(‘myfile’) 用上传单个文件
// req.files 一次上传多个文件的信息 upload.array(‘myfile’, 6) 用于上传多个文件
// myfile是参数名,类似于username
router.post(‘/upload’, upload.array(‘myfile’), (req, res) => {
console.log(‘req.files:’, req.files);
// if (req.file) {
res.json({ error: 0, data: '上传成功' });
// } else {
// res.json({ error: 0, data: '上传失败' });
// }
});
module.exports = router;
### 头像上传数据库(这里只写后端核心代码)
const express = require(‘express’);
const multer = require(‘multer’);
const fs = require(‘fs’);
const path = require(‘path’);
let User = require(‘…/modules/user’);
let router = express.Router();
const jwt = require(‘…/modules/jwt’);
let uploadpath = ‘./public/imgs/’; // 图头像上传地址
const imgURL = ‘./imgs/’; // 头像网路地址
let avatarName; // 头像名字
let storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, uploadpath);
},
filename: function (req, file, cb) {
let extname = path.extname(file.originalname);
// 张三-1834137249801230921.png
avatarName = req.username + ‘-’ + Date.now() + extname;
cb(null, avatarName);
},
});
let isImage = false;
let upload = multer({
storage: storage,
limits: {
fileSize: 1024 * 1024 * 5,
},
fileFilter: function (req, file, cb) {
if (file.mimetype.startsWith(‘image’)) {
isImage = true;
cb(null, true);
} else {
isImage = false;
cb(null, false);
}
},
});
router.post(‘/user/avatar’, jwt.verify, upload.single(‘avatar’), (req, res) => {
if (!isImage) {
res.json({ error: 1, data: ‘只能上传图片’ });
return;
}
// 如果现在的头像不是默认图片,删除现有的头像(旧头像),保存新上传的头像地址
if (fs.existsSync(uploadpath + avatarName)) {
User.findOne({ _id: req._id }, (error, user) => {
// 如果用户有旧头像,则先删除旧头像文件,然后把新头像文件的url存入用户信息
if (user.avatar != imgURL + ‘timg.jpg’) {
let oldpath = user.avatar.replace(imgURL, ‘public/imgs/’);
if (fs.existsSync(oldpath)) {
fs.unlinkSync(oldpath); //删除旧头像
}
}
// 保存新头像
user.avatar = imgURL + avatarName; //新头像的地址
user.save(error => {
res.json({ error: 0, data: ‘上传成功’ });
});
});
} else {
res.json({ error: 0, data: ‘上传失败’ });
}
});
module.exports = router;
#### JWZ权限验证代码
const jwt = require(‘jsonwebtoken’);
const secretkey = ‘howdoyoudo’; //密钥
// 生成token
module.exports.sign = (data = {}) => {
return jwt.sign(data, secretkey, {
expiresIn: 60 * 60,
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
止,不再深入研究,那么很难做到真正的技术提升。**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。