Moment.js Результат HTTP-сервера в данный момент выводится некорректно

#javascript #node.js #server #momentjs

#javascript #node.js #сервер #momentjs

Вопрос:

Впервые использую javascript и библиотеку Momentjs. У меня проблема с выводом, поскольку он не печатает то, что необходимо. Мне нужно вывести даты в формате «День, дата месяц год» (например, вторник, 14 мая 2018 года). Мне нужно использовать цикл для обхода пустого массива, dates который затем выводит форматированную версию каждой даты в отдельной строке, и мне нужно сделать это в createServer функции.

Я использую code sandbox и очень смущен тем, почему это не работает.

Я посмотрел на moment.js и другие форумы, но ни один из них не отвечает на мою проблему.

 var http = require("http");
var moment = require("moment");
moment().format();

function getDates(start, end, dates) {
  var start = moment.isDate(new Date("1st Jan 2019"));
  var end = moment.isDate(new Date("31st December 2019"));
  var dates = [];
  var current = start.clone();

  if (current !== moment.isoWeekday(1)) {
    current = moment().add(1, "w");
  }
  while (current.isBefore(end)) {
    current.clone.push(dates);
    current = moment.add(2, "w");
  }

  return dates;
}

http
  .createServer(function(req, res) {
    res.writeHead(200, { "Content-Type": "text/plain" });
    res.write("day,date", "n");
    var dates = function getDates() {};
    for (var i = 0; i < dates.length; i  ) {
      moment.res.write.format("dddd, Do MMMM YYYY", "n");
    }
    res.end();
  })
  .listen(8080);

  

Происходит то, что он отображается только day, date на экране вывода. И мне нужны форматированные даты, которые я пытался создать из пустой переменной массива ‘dates’, которая определена в функции.

Ответ №1:

 var dates = function getDates() {};
  

не вызывает getDates() функцию. Это создает dates имя новой функции, которая ничего не делает, аналогично записи

 function dates() {
}
  

Измените это на:

 var dates = getDates();
  

Другая неправильная строка:

   moment.res.write.format("dddd, Do MMMM YYYY", "n");
  

Это должно быть:

 res.write(moment.format("dddd, Do MMMM YYYYY", dates[i]), "n");
  

Вы не можете объединить res.write и moment.format в один вызов функции. И вам нужно отформатировать текущий элемент dates массива.

Комментарии:

1. Я изменил это раньше, но затем после ничего не печатает. Code sandbox просто переходит прямо к ошибке: ‘502 bad gateway’.

2. Вы не используете dates[i] в for цикле.

3. Эта строка не имеет смысла: moment.res.write.format("dddd, Do MMMM YYYY", "n");

4. Спасибо, что указали на это, я думал, что сделал это правильно. Однако первоначальная проблема все еще существует. Как только я изменил первую строку, которую вы указали, на ‘var dates = getDates( );’ появилась та же ошибка, и ничего не распечатывалось

5. Я не очень много знаю о написании node.js серверы, поэтому могут быть проблемы с той частью, которую я не вижу.