NodeJS конфликтует с Ace Editor

Довольно новичок в веб-разработке, привык к бэкенду.

Моя проблема в том, что я не могу заставить Ace Editor работать, когда HTML-страница, которой он принадлежит, отправляется через nodeJS. Когда я открываю html-файл через веб-браузер, он работает отлично. Когда я подключаюсь через свой локальный хост и загружаю файл с помощью nodejs, html-страница представляет собой просто текст.

Вот мой js-код, очень простой:

var exec = require('child_process').exec;
var fs = require('fs');
var http = require('http');
var socketio = require('socket.io');

var server = http.createServer(function(req, res) {
   res.writeHead(200, { 'Content-type': 'text/html'});
   res.end(fs.readFileSync(__dirname + '/test_ACE.html'));
}).listen(8000, function() {
   console.log('Listening at: http://localhost:8000');
});

И вот мой html:

<!DOCTYPE html>
<html lang="en">
<head>
    <link rel="stylesheet" type="text/css" href="css/stylesheet.css">
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <title>Editor</title>
</head>
<body>
    <pre id="editor">function foo(items) {
        var i;
        for (i = 0; i &lt; items.length; i++) {
            alert("Ace Rocks " + items[i]);
        }
    }</pre>
    <script src="src-noconflict/ace.js" type="text/javascript" charset="utf-8"></script>
    <script>
    var editor = ace.edit("editor");
    editor.setTheme("ace/theme/twilight");
    editor.session.setMode("ace/mode/javascript");
    </script>
</body>
</html>

Это не мой окончательный код html или js, я вырезал их настолько голыми, насколько мог, чтобы увидеть, смогу ли я заставить их работать, но даже если они настолько прямолинейны, никаких костей!

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

Буду признателен за любую помощь, даже за направление полезной документации.


person theSack    schedule 15.12.2015    source источник
comment
Под простым текстом вы имеете в виду, что HTML-разметка отображается буквально или что на странице есть только пустая страница или только текст предварительного блока (без загруженного редактора ace)?   -  person mscdex    schedule 15.12.2015
comment
@mscdex, только то, что находится в блоке ‹pre›, отображается как обычный текст, а не в редакторе Ace.   -  person theSack    schedule 15.12.2015


Ответы (1)


Одна из возможных проблем заключается в том, что ваш сервер node.js не обслуживает файл src-noconflict/ace.js. Вы можете увидеть пример рабочего сервера nodejs по адресу https://github.com/ajaxorg/ace/blob/master/static.js#L29

person a user    schedule 15.12.2015
comment
Итак, вместо того, чтобы отправлять только «test_ACE.html», отправить весь каталог? Я попробую это, спасибо - person theSack; 15.12.2015
comment
Вы также можете изучить возможность использования такого модуля, как serve-static (что встроено в Express) вместо того, чтобы вручную обслуживать каждый отдельный файл. - person mscdex; 15.12.2015
comment
Ответ a_user решил эту проблему, но не без помощи @mscdex, которая была немного более конкретной. Редактор Ace отлично рендерит. Теперь моя проблема заключается в том, чтобы ускорить работу с socket.io, но я попробую это самостоятельно. - person theSack; 16.12.2015