javascript 如何保存POST数据并将其用于另一个GET路由?

dluptydi  于 2022-12-10  发布在  Java
关注(0)|答案(2)|浏览(133)

我刚开始学习使用Express Framework的Node.js,在我的React应用程序中,用户以base64向端点/session/start发送一个图像,我想存储此base64字符串,并将其从另一个端点/session/recordFile缓冲,我尝试声明一个全局变量,但没有正面结果:),我有一个问题,使用Express.js实现此结果的适当方法是什么?

const express = require("express");
const axios = require("axios");
const Twitter = require("twitter");
const serverless = require("serverless-http");
const cors = require("cors");
const path = require("path");
const fs = require("fs");
const oauth = require("oauth");

let GlobalFile;

//start session
router.post("/session/start", function (req, res) {
  const body = JSON.parse(req.body)
  const file = body.binary
  GlobalFile = file
});

router.get("/session/recordFile", function (req, res) {
  const buf = Buffer.from(GlobalFile, 'base64')
  res.send({mockFile: buf})
});
yk9xbfzb

yk9xbfzb1#

通常情况下,在路由级别上将其赋给变量是一个坏主意。如果两个人调用您的/start API,在您设法获取第一个数据之前,变量将被第二次调用的数据覆盖。这种方法将不可扩展
也许你可以 checkout this question,把你的图像存储在一个临时文件夹中,以后再用文件名取出来。如果你可以使文件名可变,你就可以在执行第一次POST之前执行多次GET调用,而不会丢失任何数据

n53p2ov0

n53p2ov02#

您首先需要将映像存储到磁盘或将Base64字符串保存到DB或内存存储(如NEdb
将图像保存到磁盘

fs.writeFile("out.png", body, 'base64', function(err) {
  console.log(err);
});

然后您可以在GET API中使用保存的图像

let buff = fs.readFileSync('out.png');
let base64data = buff.toString('base64');

相关问题