【问题标题】:Limit for strings in node.js/expressnode.js/express 中的字符串限制
【发布时间】:2020-10-03 13:23:40
【问题描述】:

我正在使用 node.js/express 将 base64 编码的图像作为字符串发送到我的后端。我想将它存储在我的 Postgres 数据库中,但我无法获取字符串。这有什么限制吗?

在前端到达我的 AJAX 调用之前,我用以下内容填充数据:

var data = {picture: ""};

const reader = new FileReader();
const get_picture = new Promise((resolve, reject) => {
    //event handler
    reader.onload = resolve;
    reader.onerror = reject;
    //read image
    reader.readAsDataURL(file);
})
.then(() => {
    data.picture = reader.result;
})
.catch(() => {
    show_modal(modal.title.error_custom, modal.body.error_image);
});

console.log(target_data);

$.ajax({ [...]

我的控制台按预期显示:

Object { picture: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFIA…"}

这是特快路线:

router.post("/upload_image", (req, res, next) => {
  const picture = req.body.picture;

  console.log("test");
  console.log(picture);
}

这在我的后端控制台中显示了一个空行。参数的大小有什么限制吗?或者我做错了什么?谢谢

编辑:这适用于异步/等待

$("#form").submit(async function (event) {
[...]
  var data = {picture: ""};

  const get_picture = await new Promise((resolve, reject) => {
    //event handler
    reader.onload = resolve;
    reader.onerror = reject;
    //read image
    reader.readAsDataURL(file);
  })
  .then(() => {
    data.picture = reader.result;
  })
  .catch(() => {
    show_modal(modal.title.error_custom, modal.body.error_image);
  });

  $.ajax({ [...]

【问题讨论】:

  • 您的 nodejs 应用程序中是否包含 body-parser 或等效项?

标签: javascript node.js express base64


【解决方案1】:

您的 ajax 调用不会等待文件的读取过程,而是发送顶部初始化对象 (var data = {picture: ""})。 您应该在 .then()

中调用您的 ajax 请求
var data = {picture: ""};

const reader = new FileReader();
const get_picture = new Promise((resolve, reject) => {
    //event handler
    reader.onload = resolve;
    reader.onerror = reject;
    //read image
    reader.readAsDataURL(file);
})
.then(() => {
    data.picture = reader.result;
    $.ajax({[...]});
})
.catch(() => {
    show_modal(modal.title.error_custom, modal.body.error_image);
});

【讨论】:

  • 好的,非常感谢。我仍在训练 promise 和 async/await。我找到了另一种解决方案,使整个函数异步,然后使用 await 作为承诺。
  • 我不明白为什么它在控制台中显示了正确的字符串。似乎代码在没有 reader.result 的情况下继续进行 AJAX 调用,但跳回了 console.log(data),包括获取的 reader.result。
  • 您必须深入研究 JS 究竟是如何工作的。那么你的问题解决了吗?
猜你喜欢
  • 2014-07-31
  • 2016-05-16
  • 1970-01-01
  • 1970-01-01
  • 2015-09-06
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
相关资源
最近更新 更多