我正在尝试通过调用URL生成QR图片并将其存储到我们的服务器中来为我们的产品生成QR。奇怪的是,如果我从文件本身运行该函数,它将起作用。但是,如果我使用来自客户端的GET请求运行此命令,它将无法正常工作。
QRGenerator Code.js
const axios = require('axios');
const fs = require('fs');
const Path = require('path');
let requestQRGenerate = async (Tag)=>{
console.log(Tag);
var url = `https://chart.googleapis.com/chart?cht=qr&chs=150x150&chl=localhost:4200/pages/inventory/:${Tag}`
const imagePath = `${Tag.split(':').join('.')}`;
console.log(imagePath);
// let path = Path.resolve(__dirname, '../images',imagePath+'.jpg');
let path = Path.resolve(__dirname, '../images');
path = path + '/' + imagePath+'.jpg';
//console.log(path+'/'+imagePath);
const response = await axios({
method: 'GET',
url: url,
responseType: 'stream'
})
response.data.pipe(fs.createWriteStream(path));
return new Promise((resolve,reject)=>{
response.data.on('end', () =>{
resolve('QR Generated for reel successfully')
})
response.data.on('error', (err)=>{
reject(err);
})
})
}
requestQRGenerate('06C-01003G-21:3975')
module.exports.requestQRGenerate = requestQRGenerate;
您可以说我在尝试许多尝试格式化字符串以将文件另存为的事情。我基本上需要将文件另存为Tag变量,并且由于文件名中不能包含“:”,因此将其替换为“。”。然后是.jpg。
inventoryController.js
exports.generateQRCode =
async (req,res,next)=>{
try {
let Tag = req.body.tag
let TagRes = await requestQRGen.requestQRGenerate(Tag);
res.status(200).send(TagRes)
} catch (e) {
res.status(500).json({
Status: "Error",
Content: e
})
}
这是我尝试从GET请求执行函数时遇到的错误。
events.js:174
throw er; // Unhandled 'error' event
^
Error: ENOENT: no such file or directory, open '
C:\Domains\App\images\06C-01003G-21.3975
.jpg'
Emitted 'error' event at:
at WriteStream.onerror (_stream_readable.js:713:12)
at WriteStream.emit (events.js:189:13)
at lazyFs.open (internal/fs/streams.js:272:12)
at FSReqWrap.args [as oncomplete] (fs.js:140:20)
我不明白为什么它不能通过GET请求工作,但是当我运行文件本身时却可以工作。
先谢谢了。