# basenode **Repository Path**: chang-xiaodong/basenode ## Basic Information - **Project Name**: basenode - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-06-14 - **Last Updated**: 2026-03-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # node基础 ### 主要功能 * 文件夹、文件操作 * OS ### 缓存 缓存是后端设置的,作为前端性能指标的其中之一,面试经常会问,工作原理如下 #### 原理 ##### 设置强缓存 强缓存主要是通过http请求头中的Cache-Control和Expires两个字段控制,Expires是通过设置过期时间类控制,这里当客户端和服务端时间不一致时会出现 bug,Cache-Control是Expires的替代方案 一般静态资源需要缓存时设置强缓存,如打包后具有哈希值的文件,在设置的过期时间内,再次请求时直接从缓存中读取数据 ```js router.get('/cache', function (req, res, next) { // 设置缓存响应头 res.setHeader('Cache-Control', 'public, max-age=60'); // 缓存 1 分钟 单位是秒 const data = {name:"xixi",age:18} res.send(data); }); ``` ### 图片的MD5 #### 图片md5的作用 1. 数据完整性验证:通过计算图片的MD5值,可以验证图片在传输或存储过程中是否保持完整,确保图片未被篡改或损坏。 2. 文件唯一性验证:每张图片生成的MD5值都是唯一的(理论上存在极小的碰撞可能性,但实际中几乎可以忽略不计),因此MD5值可以用于验证图片的唯一性。 3. 内容去重:在处理大量图片时,可以利用MD5值快速识别重复的图片,从而在数据库中进行去重处理,提高存储效率和查询速度。 4. 版权保护:虽然MD5本身不能直接用于版权保护,但可以通过比较图片的MD5值来初步判断图片是否被未经授权地复制或分发。 5. 内容原创性验证:在自媒体、网站SEO等领域,通过比较图片的MD5值可以验证图片内容的原创性,避免直接复制或搬运他人图片导致的版权问题。 ### 配置别名 在 Node.js 项目中,引入自定义模块,需写正确路径(相对或绝对),也可以结合第三方包module-alias来配置别名,以下是两种配置方式 #### 方式一 ```javascript // 引入需要的模块 const path = require('path'); const moduleAlias = require('module-alias'); // 定义别名映射 const aliases = { '@': path.resolve(__dirname), '@app': path.resolve(__dirname, 'app'), '@core': path.resolve(__dirname, 'core'), // ... 其他别名定义 '@validators': path.resolve(__dirname, 'app/validators') }; // 为每个别名设置路径 Object.keys(aliases).forEach((alias) => { moduleAlias.addAlias(alias, aliases[alias]); }); // 使用这些别名 例如:const something = require('@app/someModule'); ``` #### 方式二 ```javascript require('module-alias/register') //package.json 文件中 { "_moduleAliases": { "@": ".", "@app": "app", "@core": "core", "@middlewares": "middlewares", "@api": "app/api", "@dao": "app/dao", "@lib": "app/lib", "@models": "app/models", "@service": "app/service", "@validators": "app/validators" } } ``` * 注意:请求形式为局部刷新的方式请求,在地址栏直接请求相当于强制刷新 ### nodemailer模块发送邮件 可用于发送通知,指派任务等 ```javascript var nodemailer = require("nodemailer"); // 建立一个SMTP传输连接 var smtpTransport = nodemailer.createTransport({ service: "QQ", auth: { user: "xxxx@qq.com", pass: "授权码" //// 填写你在QQ邮箱中获取的授权码,不是登录密码 } }); function sendEmail(from, to, subject,res){ // 邮件选项 var mailOptions = { from: from, // 发件人邮件地址 to: to, // 收件人邮件地址列表 subject: subject, // 标题 text: "Hello world ✔", // 纯文本内容 html: "Hello world ✔", // HTML内容 // 如果需要添加附件,可以定义attachments数组 // attachments: [ // { // filename: '附件1.jpg', // 附件的文件名 // path: '附件1的本地路径或URL', // 附件的本地文件路径或网络URL // cid: 'myImage1', // CID,用于在HTML内容中引用该图片 // }, // { // filename: '附件2.docx', // path: '附件2的本地路径或URL', // cid: 'myDocument', // }, // // 可以继续添加更多附件... // ], } // 发送邮件 smtpTransport.sendMail(mailOptions, function (err, response) { if (err) { console.log("邮件发送失败") return } else { console.log("邮件发送成功") } }); } module.exports = sendEmail; ``` ##### 授权码开通 QQ邮箱为例:登录——设置——账号——POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务——开启服务【验证后输入授权码即可】 * 不要滥发垃圾信息 * 注意隐私信息的传输与防范 ## start提交记录写入 * formidable处理文件上传 (3 hours ago) * 删除node_modules文件夹 (4 hours ago) * 配置忽略提交文件 (3 days ago) * 基础练习serve文件 (3 days ago) * node基础 (3 days ago) * node脚本记录git每次提交的commit记录到readme.md文件 (15 seconds ago) * 测试文件修改权限,未通过 (20 seconds ago) * 事件循环测试 (16 seconds ago) * 插件http-proxy-middleware配置代理中间件 (18 seconds ago) * 自定义封禁IP中间件 (14 seconds ago) * 响应下载附件 (15 seconds ago) * 使用nodemailer模块发送邮件 (18 seconds ago) * 免费API转换IP地址查询天气信息 可用querystring模块拼接地址 (46 seconds ago) * 缓存之设置缓存响应头Cache-Control (17 seconds ago) * module-alias第三方模块配置文件夹别名 (18 seconds ago) * os模块提供操作系统的信息 (29 seconds ago) * helmet设置安全HTTP头中间件 (13 seconds ago) * fix: 切片上传,新增file.html和test.js两个文件,该功能测试尚未通过,待进一步测试 (29 seconds ago) * feat: gitee第三方授权 (27 seconds ago) * 解压文件到目标文件夹 (66 seconds ago) * 计算机存储单位之间的关系 (18 minutes ago) * 创建DeepSeek账号,测试API调用 (43 seconds ago)