2015-02-21 2 views
-2

Я принес эту книгу: http://www.amazon.com/Full-Stack-JavaScript-Development-MEAN/dp/0992461251/ref=sr_1_3?ie=UTF8&qid=1424518897&sr=8-3&keywords=meanошибка Javascript с JSHint

И я изучал примеры и наткнулся на этот кусок кода:

var http = require(‘http’); 
var fs = require(‘fs’); 
http.createServer(function (req, res) { 
    if (req.url === ‘/favicon.ico’) { 
      return res.end(); 
    } 
    console.log(‘Incoming request to ‘ + req.url); 
    var i = 2; 
    res.writeHead(200, {‘Content-Type’: ‘text/plain’}); 
    setTimeout(function() { 
      fs.readFile(__filename, { 
        encoding: ‘utf8’ 
      }, function (error, contents) { 
        if (error) { 
          console.error(error); 
          return res.end(); 
        } 
        console.log(‘sending response for ‘ + req.url); 
        res.end(contents); 
      }); 
    }, 5000); 
    while(i—) { 
      console.log(‘Loop value: ‘  + i + ‘\r’); 
    } 
}).listen(1337, ‘127.0.0.1’); 
console.log(‘Server running at http://127.0.0.1:1337/’); 

Я нашел 3 проблемы:

  • Программист использует 2 пробела, что является общим для начинающих программистов (теперь у него 8 пробелов, потому что я его изменил, должно быть 4, я знаю)
  • Th e код не компилируется
  • Плохие методы программирования, такие как «__filename», откуда он получил эту переменную от ??

Так что, как новый программист, я могу перенапрягать себя и делать неправильные выводы. Это так?

Эти ошибки, приведенные JSHint (НПМ установки):

27,12: Неожиданное '-'.

28,9: Ожидаемая ')' в соответствии '(' из строки 27 и вместо этого увидел 'консоль'

28,16:. Ожидаемый идентификатор и вместо этого увидел

28 ''. , 16: Ожидаемый вызов присваивания или функции и вместо этого увидел выражение

28,17:.. Отсутствует точка с запятой

30,1: Ожидаемая ')' и вместо этого увидел '}'.

30,2: Отсутствует точка с запятой.

30,2: Ожидаемый идентификатор и вместо этого «)».

30,3: Ожидается, что оператор и вместо этого увидели '.'.

30,3: Ожидается назначение или вызов функции, а вместо этого - выражение.

30,4: Отсутствует точка с запятой.

Так этот парень пишет плохой код в своей книге, или я как программист, начинающий javascript, чрезмерно растягивая себя?

+1

BTW два пространства очень практично в книге, потому что наборной. – meskobalazs

+0

Он использовал 2 пробела, но когда я копировал и вставлял код, это было 8 пробелов, или он просто произошел из-за перевода формата между разными документами? –

+1

Нет, это потому, что они были и остаются вкладками (см. Источник). –

ответ

1

Это потому, что все ваши ' были переведены на типографские и . Однако быстрый поиск и замена будут исправлены.

Также, i-- был заменен лигатурой i—, исправить это тоже. Старайтесь не копировать и вставлять код из книг. Обычно исходный код прикрепляется или загружается откуда-то, но ручной ввод - хороший способ для нового программиста познакомиться с языком.

Что касается ведущего двойного подчеркивания, то нет правила, запрещающего его, и обычно это способ отметить что-то как личное (даже соглашение в языках, таких как Python) или зарезервированное.

+0

Несмотря на то, что вы правы в отношении кода выше, я уже пытался изменить «и все же он не работает». Доказательство: http://imgur.com/zgiOeZV –

+0

Я также попытался заменить __filename на «anyfile», но jshint покажет erros. –

+0

, конечно, он показывает, как он не определен в файле. Установите '__filename' как глобальный – meskobalazs

1

Это рабочий код. Вы просто испортили форматирование.

является -- (может быть преобразована в качестве лигатуры), кавычки вместо ' и __filename является глобальным переменным узлом (см Documentation).

исправить ошибки формата и запустить код, он работает:

> node app.js 
> Server running at http://127.0.0.1:1337/ 
Смежные вопросы