Node Express помещает HTML-код в переменную (не отправляется на дисплей) [duplicate]

Просматривая исходный код , существует конструктор, у которого not отмечен как Obsolete:

public XmlSerializerInputFormatter(MvcOptions options)

Поскольку этот конструктор принимает экземпляр MvcOptions, вы должны пройти через существующий аргумент options следующим образом:

services.AddMvc(options =>
{
    // allow xml format for input
    options.InputFormatters.Add(new XmlSerializerInputFormatter(options));
}) ...

71
задан Kevin Guan 27 March 2016 в 01:06
поделиться

4 ответа

Вы хотите использовать массив process.argv для доступа к аргументам командной строки, чтобы получить имя файла и модуль FileSystem (fs) , чтобы прочитать файл. Например:

// Make sure we got a filename on the command line.
if (process.argv.length < 3) {
  console.log('Usage: node ' + process.argv[1] + ' FILENAME');
  process.exit(1);
}
// Read the file and print its contents.
var fs = require('fs')
  , filename = process.argv[2];
fs.readFile(filename, 'utf8', function(err, data) {
  if (err) throw err;
  console.log('OK: ' + filename);
  console.log(data)
});

Чтобы немного сломать это для вас, process.argv обычно имеет длину два, нулевой элемент - интерпретатор «узла», а первый - это скрипт, который в данный момент запущен , элементы после этого были переданы в командной строке. После того, как вы вытащили имя файла из argv, вы можете использовать функции файловой системы для чтения файла и делать все, что хотите, с его содержимым. Пример использования будет выглядеть так:

$ node ./cat.js file.txt
OK: file.txt
This is file.txt!

[Edit] Как упоминает @wtfcoder, использование метода «fs.readFile()» может быть не лучшей идеей, поскольку оно будет буферизовать все содержимое файла до приведя его к функции обратного вызова. Эта буферизация может потенциально использовать большую часть памяти, но, что более важно, она не использует одну из основных функций node.js - асинхронный, вызываемый ввод / вывод.

Способ «узла» для обработки большой файл (или любой файл, действительно) должен был бы использовать fs.read() и обрабатывать каждый доступный кусок, поскольку он доступен из операционной системы. Однако чтение файла как такового требует от вас собственного (возможно) инкрементного разбора / обработки файла, и некоторый объем буферизации может быть неизбежным.

123
ответ дан maerics 25 August 2018 в 08:24
поделиться

IMHO, fs.readFile() следует избегать, потому что он загружает ВСЕ файл в память и не будет вызывать обратный вызов до тех пор, пока все файлы не будут прочитаны.

Самый простой способ прочитать текстовый файл читать его по строкам. Я рекомендую BufferedReader :

new BufferedReader ("file", { encoding: "utf8" })
    .on ("error", function (error){
        console.log ("error: " + error);
    })
    .on ("line", function (line){
        console.log ("line: " + line);
    })
    .on ("end", function (){
        console.log ("EOF");
    })
    .read ();

. Для сложных структур данных, таких как .properties или json-файлов, вам нужно использовать парсер (внутри он также должен использовать буферный считыватель).

22
ответ дан Gabriel Llamas 25 August 2018 в 08:24
поделиться

Я отправляю полный пример, который я, наконец, начал работать. Здесь я читаю файл rooms/rooms.txt из сценария rooms/rooms.js

var fs = require('fs');
var path = require('path');
var readStream = fs.createReadStream(path.join(__dirname, '../rooms') + '/rooms.txt', 'utf8');
let data = ''
readStream.on('data', function(chunk) {
    data += chunk;
}).on('end', function() {
    console.log(data);
});
2
ответ дан iamnotsam 25 August 2018 в 08:24
поделиться

Вы можете использовать readstream и pipe для чтения файла строки за строкой, не считывая весь файл в память один раз.

var fs = require('fs'),
    es = require('event-stream'),
    os = require('os');

var s = fs.createReadStream(path)
    .pipe(es.split())
    .pipe(es.mapSync(function(line) {
        //pause the readstream
        s.pause();
        console.log("line:", line);
        s.resume();
    })
    .on('error', function(err) {
        console.log('Error:', err);
    })
    .on('end', function() {
        console.log('Finish reading.');
    })
);
2
ответ дан Kris Roofe 25 August 2018 в 08:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: