Angular fs.ReadFile找不到绝对路径的文件,也无法用path.resolve编译路径

问题描述 投票:0回答:1

我正在使用我的角度前端连接到 dymo 标签打印机。当前设置,我将整个 xml 文件作为对象内的字符串。与其将其解析为 json,让我的代码根据产品进行更改,重新转换为 xml 并将其发送到标签打印机。

我想通过将包含带有 xml 的巨大字符串的对象移动到单独的 label.xml 文件来使这项工作更好。我在“查找”该文件时遇到问题。为了解析文件,我使用 xml2js。我正在尝试使用“简单如馅饼用法”标题下描述的函数来读取 xml 文件。我复制了下面的例子:

var fs = require('fs'),
xml2js = require('xml2js');

var parser = new xml2js.Parser();
fs.readFile(__dirname + '/foo.xml', function(err, data) {
    parser.parseString(data, function (err, result) {
        console.dir(result);
        console.log('Done');
    });
});

首先我尝试使用绝对路径,据我了解,绝对路径应该可以在我的本地计算机上运行。但我在浏览器中不断收到错误“未解决的承诺 - 找不到文件”。如果检查了无数次我没有在路径上犯错误。但这不是问题。 我在

fs.readFileSync()
中的类似功能上找到了与此问题相关的主题。

当我正确理解这些主题时,fs.readFile 将无法使用绝对路径,并且它始终需要相对路径。但由于它位于不同的工作目录中,我需要使用 path.resolve() 来设置正确的路径。

我不是100%确定我使用正确,但是当我使用path.resolve()时,控制台在检查这行代码时给出错误:

path.resolve is not a function
。这是检索 label.xml 文件的代码:

const path = require("path");
var fs = require('fs'),
xml2js = require('xml2js');

var parser = new xml2js.Parser();
  fs.readFile(path.resolve("src/assets", '../label.xml'), function(err: any, data: any) {
      parser.parseString(data, function (err: any, result: any) {
          console.dir(result);
          console.log('Done');
      });
  });

我的组件和 label.xml 的绝对路径是:

  //absolute path to current ts file :  /c/Users/MyUsername/OneDrive/Documenten/Projects/ProjectName/src/app/components/componentName/componentName.ts
  //absolute path to label.xml file : '/c/Users/MyUsername/OneDrive/Documenten/Projects/ProjectName/src/assets/label.xml'

我想知道为什么我的角度无法使用

path.resolve()
。我还查阅了很多文档,但我不知道修复该函数是否可以解决问题,因为
fs.ReadFile()
也不适用于绝对路径。如前所述,我不确定我是否正确,该功能需要相对路径才能工作。我可以获得有关如何使用我的个人路径实现此功能的帮助吗?

也许不是代码的问题,而是xml2js依赖有问题?因为我必须用

--legacy-peer-deps
安装它。但我有很多依赖项,因为我现在使用 Angular15。为了完整起见,我还在下面添加了我的 package.json。我认为这个问题与此无关。

{
  "name": "MyProjectName",
  "version": "0.0.0",
  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build",
    "watch": "ng build --watch --configuration development",
    "test": "ng test"
  },
  "private": true,
  "dependencies": {
    "@angular/animations": "^15.0.1",
    "@angular/cdk": "^14.2.3",
    "@angular/common": "^15.0.1",
    "@angular/compiler": "^15.0.1",
    "@angular/core": "^15.0.1",
    "@angular/forms": "^15.0.1",
    "@angular/platform-browser": "^15.0.1",
    "@angular/platform-browser-dynamic": "^15.0.1",
    "@angular/router": "^15.0.1",
    "@fortawesome/angular-fontawesome": "^0.12.0",
    "@fortawesome/fontawesome-common-types": "^6.2.1",
    "@fortawesome/fontawesome-svg-core": "^6.2.1",
    "@fortawesome/free-brands-svg-icons": "^6.2.1",
    "@fortawesome/free-regular-svg-icons": "^6.2.1",
    "@fortawesome/free-solid-svg-icons": "^6.2.1",
    "@ng-bootstrap/ng-bootstrap": "^14.0.0",
    "@ng-select/ng-select": "^9.0.2",
    "@popperjs/core": "^2.11.6",
    "@types/dymo-label-framework": "^1.2.36",
    "bootstrap": "^5.2.1",
    "express": "^4.18.2",
    "file-saver": "^2.0.5",
    "fs-web": "^1.0.1",
    "mdb-angular-ui-kit": "^3.0.0",
    "rxjs": "~7.5.0",
    "stream": "^0.0.2",
    "timers": "^0.1.1",
    "tslib": "^2.3.0",
    "url": "^0.11.3",
    "xml2js": "^0.6.2",
    "zone.js": "~0.11.4"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "^15.0.2",
    "@angular/cli": "~15.0.2",
    "@angular/compiler-cli": "^15.0.1",
    "@angular/localize": "^15.0.1",
    "@types/file-saver": "^2.0.5",
    "@types/jasmine": "~4.0.0",
    "@types/node": "^20.11.5",
    "jasmine-core": "~4.1.0",
    "karma": "~6.3.0",
    "karma-chrome-launcher": "~3.1.0",
    "karma-coverage": "~2.2.0",
    "karma-jasmine": "~5.0.0",
    "karma-jasmine-html-reporter": "~1.7.0",
    "typescript": "~4.8.4"
  }
}
angular typescript path node.js-fs xml2js
1个回答
0
投票

你尝试使用这个吗:

const path = require("path");
var fs = require('fs'),

在浏览器中?

© www.soinside.com 2019 - 2024. All rights reserved.