Node.js中如何配合multer使用token验证实现跨服务器图片上传
调整方案共3步,直接修改对应代码即可:
1. 调整接收端/fromOther路由中间件顺序
token校验逻辑是读取请求头的Authorization字段,不需要等待multer解析文件体,所以把verifyToken放在multer中间件前面即可,校验通过后再执行文件上传逻辑,还能避免非法请求占用服务器上传资源:
// file.js 中修改 /fromOther 路由 router.post('/fromOther', verifyToken, uploadForSentFile.single('logo'), function (req, res) { console.log("------file upload -------") console.log(req.file) res.json(req.file) });
2. 发送端/toOther接口请求目标服务器时携带token
你当前的axios请求头没有携带Authorization字段,直接从当前请求的头中取出token透传给目标服务器即可(两台服务器jwt密钥一致的场景下可以直接用,密钥不同的话替换为符合目标服务器规则的token即可):
// file.js 中修改 /toOther 路由里的headers构造逻辑 const headers = { ...formData.getHeaders(), "Content-Length": formData.getLengthSync(), "Authorization": req.headers.authorization // 新增本行,透传token };
3. 确认前端调用createUploadToOther时已携带正确token
你当前settings.js里的请求已经配置了headers参数,只需要确保../config/env导出的headers中已包含Authorization字段即可。如果需要支持动态传入token,可以调整为如下写法:
// settings.js 修改 import axios from 'axios' import { baseHeaders } from '../config/env' export function createUploadToOther(data, customHeaders = {}) { return axios.post('/file/toOther', data, { headers: { ...baseHeaders, ...customHeaders } }) }
调用时把携带token的headers传入方法即可。
注:multer仅负责解析请求体中的文件内容,不会影响请求头的读取,verifyToken放在multer前后都能正常拿到token,放在前面安全性和性能更优。
内容的提问来源于stack exchange,提问作者niddddddfier
相关产品推荐
相关产品推荐

