【问题标题】:Deno array output issueDeno 数组输出问题
【发布时间】:2021-08-05 23:37:33
【问题描述】:

我正在尝试使用 deno 运行 API,它应该显示来自给定目录的文件的一些 PDF 元数据。 这在 PDF-ID 之前工作正常。 PDF-ID 应该是文件名的最后两位数字(例如 jk03.pdf、fh04.pdf、...)。如果我运行 API,所有元数据都显示为对象内的数组,除非 ID 创建了自己的数组。有谁知道我如何在不创建自己的数组的情况下实现 ID。

这是我到目前为止得到的:

import { PDFDocument } from 'https://cdn.skypack.dev/pdf-lib@^1.11.1?dts';
import { opine, json } from "https://deno.land/x/opine@1.3.4/mod.ts";


const app = opine();
const port = 3000;

app.use(json());

let metaData = new Array();
let pdfData = new Object();

app.get("/pdf", async(req, res) => {
  
  const basePath = './Documents/';
  for (const dirEntry of Deno.readDirSync("./Documents")) {
    
    async function readDocumentMetadata() {
      const filePath = basePath + dirEntry.name
      const existingPdfBytes = await Deno.readFile(filePath);
      const pdfDoc = await PDFDocument.load(existingPdfBytes, {
        updateMetadata: false 
      });
      
      var pdfId = dirEntry.name.match(/[0-9]+/g)[0];      
      const file = Deno.openSync(filePath, { read: true });
      const fileInfo = Deno.fstatSync(file.rid);

      pdfData = {        
        ID : pdfId[0],
        Name : dirEntry.name,
        Size : fileInfo.size + " Bytes",
        Pages : pdfDoc.getPageCount(),
        CreationDate : pdfDoc.getCreationDate(),
        ModificationDate : pdfDoc.getModificationDate()
      };

      metaData.push(pdfData);        
      
    };
    await readDocumentMetadata();    
  };
  res.json(metaData);
});

console.log("Server running on port", (port));
app.listen(port);

这是我收到的错误消息: { "资源": "/c:/Users/JK/deno/deno-vs-node/GetAllPdf.ts", “所有者”:“德诺”, “代码”:“2531”, “严重性”:8, "message": "对象可能是 'null'。", “来源”:“deno-ts”, “开始线号”:25, “开始列”:21, "endLineNumber": 25, “结束列”:50 }

【问题讨论】:

  • 阅读developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…String.prototype.match 返回所有匹配的数组。如果您确定只有匹配,请执行const pdfId = dirEntry.name.match(/[0-9]+/g)[0];
  • 不幸的是,这仍然给我一个错误消息:对象可能是'null'。
  • 能否请您粘贴代码并将错误指向它发生的行
  • { “资源”:“/c:/Users/JK/deno/deno-vs-node/PostPDF.ts”,“所有者”:“deno”,“代码”:“2531” , "severity": 8, "message": "Object is possible is 'null'.", "source": "deno-ts", "startLineNumber": 37, "startColumn": 19, "endLineNumber": 37, " endColumn": 48 }
  • 这是在第 19 行:var fields = req.body.usedFields;

标签: arrays regex typescript deno


【解决方案1】:

我在行尾添加了 .toString() ,现在它可以正常工作了;

const pdfId = dirEntry.name.match(/[0-9]+/)?.toString();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-30
    • 2014-05-25
    • 2022-11-26
    • 2013-12-29
    相关资源
    最近更新 更多