yêu cầu tệp dưới dạng chuỗi


99

Tôi đang sử dụng node + express và tôi chỉ tự hỏi làm cách nào để có thể nhập bất kỳ tệp nào dưới dạng chuỗi. Giả sử tôi có một tệp txt, tất cả những gì tôi muốn là tải nó vào một biến như vậy.

var string = require("words.txt");

Tôi chống lại

modules.exports = function(){

    var string = "whatever";

    return string;

}

1
Nó không phải là một câu trả lời, nhưng tránh được điều này tạo ra một chức năng: const { string } = require('words.js');nơi words.jschứamodule.exports = { string: 'whatever' };
Đêm Pilafian

Câu trả lời:


127

Nếu nó dành cho một (vài) tiện ích mở rộng cụ thể, bạn có thể thêm require.extensionstrình xử lý của riêng mình :

var fs = require('fs');

require.extensions['.txt'] = function (module, filename) {
    module.exports = fs.readFileSync(filename, 'utf8');
};

var words = require("./words.txt");

console.log(typeof words); // string

Nếu không, bạn có thể kết hợp fs.readFilevới require.resolve:

var fs = require('fs');

function readModuleFile(path, callback) {
    try {
        var filename = require.resolve(path);
        fs.readFile(filename, 'utf8', callback);
    } catch (e) {
        callback(e);
    }
}

readModuleFile('./words.txt', function (err, words) {
    console.log(words);
});

51
request.extensions hiện không được chấp nhận cho bất kỳ ai xem bài đăng này. nodejs.org/api/globals.html#globals_require_extensions
blockloop

2
Deprecated in the pastbutSince the module system is locked, this feature will probably never go away. However, it may have subtle bugs and complexities that are best left untouched.
loretoparisi

10
Mặc dù nó thực sự không được chấp nhận, có bất kỳ thay thế tốt nào không? (điều đó kéo dài yêu cầu, ý tôi là)
juandemarco

31

Để đọc tệp CSS thành Chuỗi, hãy sử dụng mã này. Nó hoạt động cho .txt.

const fs = require('fs')
const path = require('path')

const css = fs.readFileSync(path.resolve(__dirname, 'email.css'), 'utf8')

ES6:

import fs from 'fs'
import path from 'path'

let css = fs.readFileSync(path.resolve(__dirname, 'email.css'), 'utf8')

2
Làm cách nào để hoàn thành việc này cho một tệp html? Tôi có một tệp html trong một thư mục anh chị em mà tôi cần đọc và tải dưới dạng một chuỗi vào cheerio?
lopezdp


0

bạn có thể yêu cầu tệp .json, cả với node.js và TypeScript. Đó là định dạng duy nhất hỗ trợ được yêu cầu () phù hợp để tuần tự hóa văn bản. YOu có thể sử dụng một công cụ thời gian biên dịch để đóng gói các tệp của bạn thành một json, chẳng hạn như https://github.com/cancerberoSgx/fs-to-json


0

Câu trả lời đã chọn không được dùng nữakhông được đề xuất nữa. Tài liệu NodeJS gợi ý các cách tiếp cận khác như:

tải mô-đun thông qua một số chương trình Node.js khác

nhưng nó không mở rộng thêm nữa.

  • Bạn có thể sử dụng một thư viện rất đơn giản như sau: request-text

  • Hoặc tự mình thực hiện (như gói ở trên:)

    var fs = require('fs');
    module.exports = function(name, require) {
       return fs.readFileSync(require.resolve(name)).toString();
    };
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.