ค้นหาเว็บไซต์

node.js - อ่านและเขียนไฟล์ข้อความใน typescript


ฉันควรอ่านและเขียนไฟล์ข้อความจาก TypeScript ใน Node.js อย่างไร? ฉันไม่แน่ใจว่าการอ่าน/เขียนไฟล์ใน Node.js จะถูกจำกัดใน sandbox หรือไม่ หากไม่เป็นเช่นนั้น ฉันเชื่อว่าควรมีวิธีในการเข้าถึงระบบไฟล์

คำตอบ #1

เชื่อว่าควรมีวิธีในการเข้าถึงระบบไฟล์

รวม node.d.ts โดยใช้ npm i @types/node จากนั้นสร้างไฟล์ tsconfig.json ใหม่ (npx tsc --init) และสร้างไฟล์ .ts ดังนี้:

import * as fs from 'fs';
fs.readFileSync('foo.txt','utf8');

คุณสามารถใช้ฟังก์ชันอื่น ๆ ใน fs ได้เช่นกัน : https://nodejs.org/api/fs.html

เพิ่มเติม

เริ่มต้นอย่างรวดเร็วกับ Node: https://basarat.gitbook.io/typescript/nodejs

คำตอบ #2

import { readFileSync } from 'fs';

const file = readFileSync('./filename.txt', 'utf-8');

วิธีนี้ใช้ได้ผลกับฉัน คุณอาจจำเป็นต้องห่อคำสั่งที่สองในฟังก์ชันใด ๆ หรือคุณอาจจำเป็นต้องประกาศภายในคลาสโดยไม่ใช้คำสำคัญ const.

คำตอบ #3

ก่อนอื่นคุณจะต้องติดตั้งคำนิยาม node สำหรับ Typescript คุณสามารถหาค่าคำนิยามได้ที่นี่:

https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/node/node.d.ts

เมื่อคุณมีไฟล์แล้ว เพียงเพิ่มการอ้างอิงไปยังไฟล์ .ts ของคุณดังนี้:

/// <reference path="path/to/node.d.ts" />

จากนั้นคุณสามารถเขียนคลาส TypeScript ของคุณที่อ่าน/เขียน โดยใช้โมดูล Node File System คลาส TypeScript ของคุณ myClass.ts สามารถมีรูปแบบดังนี้:

/// <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();

เมื่อคุณแปลงไฟล์ .ts ของคุณเป็นจาวาสคริปต์ (ดูที่นี่หากคุณไม่รู้วิธีทำ) คุณสามารถรันไฟล์จาวาสคริปต์ของคุณด้วย node และปล่อยให้เวทมนตร์เกิดขึ้น:

> node myClass.js

คำตอบ #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);
})

แก้ไข :

พิจารณาโครงสร้างของโครงการ:

../readfile/
├── filename.txt
└── src
    ├── index.js
    └── index.ts

พิจารณา 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));

หากคุณมีในโฟลเดอร์ readfile และรัน tsc src/index.ts && node src/index.js ผลลัพธ์จะเป็น:

./
        filename.txt
        src

/home/andrei/scripts/readfile/src/
        index.js
        index.ts

นั่นคือ มันขึ้นอยู่กับว่าคุณรันโนดที่ไหน

__dirname คือชื่อไดเรกทอรีของโมดูลปัจจุบัน

บทความที่เกี่ยวข้อง