node.js - Čtení a zápis textového souboru v TypeScriptu
Jak bych měl číst a zapisovat textový soubor z TypeScriptu v Node.js? Nejsem si jistý, zda je čtení/zápis souboru v Node.js sandboxován, pokud ne, věřím, že by měl existovat způsob, jak přistupovat k souborovému systému.
Odpověď č. 1
věřím, že by měl existovat způsob, jak přistupovat k souborovému systému.
Zahrňte node.d.ts pomocí npm i @types/node. A poté vytvořte nový soubor tsconfig.json (npx tsc --init) a vytvořte soubor .ts následovně:
import * as fs from 'fs';
fs.readFileSync('foo.txt','utf8');
Můžete také používat další funkce v fs: https://nodejs.org/api/fs.html
Více
Rychlý start Node: https://basarat.gitbook.io/typescript/nodejs
Odpověď č. 2
import { readFileSync } from 'fs';
const file = readFileSync('./filename.txt', 'utf-8');
Toto mi fungovalo. Možná budete muset druhý příkaz zabalit do nějaké funkce, nebo možná budete muset deklarovat uvnitř třídy bez klíčového slova const.
Odpověď č. 3
Nejprve budete muset nainstalovat node definice pro Typescript. Soubor s definicemi můžete najít zde:
https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/node/node.d.ts
Jakmile budete mít soubor, stačí přidat odkaz do svého souboru .ts takto:
/// <reference path="path/to/node.d.ts" />Pak můžete napsat svou TypeScript třídu, která čte/zapisuje, pomocí modulu Node File System. Vaše TypeScript třída myClass.ts může vypadat takto:
/// <reference path="path/to/node.d.ts" />
class MyClass {
// Here we import the File System module of node
private fs = require('fs');
constructor() { }
createFile() {
this.fs.writeFile('file.txt', 'I am cool!', function(err) {
if (err) {
return console.error(err);
}
console.log("File created!");
});
}
showFile() {
this.fs.readFile('file.txt', function (err, data) {
if (err) {
return console.error(err);
}
console.log("Asynchronous read: " + data.toString());
});
}
}
// Usage
// var obj = new MyClass();
// obj.createFile();
// obj.showFile();
Jakmile přeložíte svůj soubor .ts do JavaScriptu (podívejte se sem, pokud nevíte, jak to udělat), můžete spustit svůj JavaScriptový soubor pomocí Node a nechat kouzlo fungovat:
> node myClass.js
Odpověď č. 4
import * as fs from 'fs';
import * as path from 'path';
fs.readFile(path.join(__dirname, "filename.txt"), (err, data) => {
if (err) throw err;
console.log(data);
})
UPRAVIT :
zvažte strukturu projektu:
../readfile/
├── filename.txt
└── src
├── index.js
└── index.ts
zvažte index.ts:
import * as fs from 'fs';
import * as path from 'path';
function lookFilesInDirectory(path_directory) {
fs.stat(path_directory, (err, stat) => {
if (!err) {
if (stat.isDirectory()) {
console.log(path_directory)
fs.readdirSync(path_directory).forEach(file => {
console.log(`\t${file}`);
});
console.log();
}
}
});
}
let path_view = './';
lookFilesInDirectory(path_view);
lookFilesInDirectory(path.join(__dirname, path_view));
pokud máte ve složce readfile a spustíte tsc src/index.ts && node src/index.js, výstup bude:
./
filename.txt
src
/home/andrei/scripts/readfile/src/
index.js
index.ts
to znamená, že to závisí na tom, kde spouštíte uzel.
__dirname je název adresáře aktuálního modulu.
