2013-04-11 5 views
0

Я пытаюсь добавить HTML динамически с помощью среды Express в статическом HTML-файле, который обслуживает мой сервер. Я нашел о модуле cheerio, который делает именно то, что я хочу, но мне было интересно, есть ли гораздо более дешевый способ для системы, а не для загрузки всего HTML и добавления строки.AJAX call with Express

Я искал об AJAX и о том, как общаться с клиентом, но мне не удалось заставить его работать. Код, я использую с Cheerio является:

exports.modify = function(req, res){ 

    var html = fs.readFileSync(__dirname + '/../public/index.html', 'utf8'); 
    var $ = cheerio.load(html); 
    var scriptNode = '<p>Source code modified</p>'; 
    $('body').append(scriptNode); 

    fs.writeFile(__dirname + '/../public/index.html', $.html(), function (err) { 
    if (err) throw err; 
    console.log('It\'s modified!'); 
    }); 

    res.send($.html()); 

}; 

Как я могу сделать это в более «правильного» пути (возможно, с AJAX вызова)? Любые предложения были бы более чем приветствуются.

+0

Я не очень понимаю, что вы пытаясь сделать. Если вы хотите обрабатывать JSON в качестве типа данных, то вы можете настроить другой конкретный маршрут, или вы можете отфильтровать тип запроса в текущем маршрутном обработчике: export.index = function (req, res) { var data = someData .fetch(); switch (req.format) { case 'json': res.json (data); break; по умолчанию: res.render ('шаблон', { данные: данные }); } }; –

+0

Я просто хочу, чтобы маршрут изменения отправил scriptNode, так как приведенный выше код показывает клиенту index.html с AJAX, затем извлекает его и записывает в файл, не обновляя всю страницу. – giokokos

+0

У вас должно быть 3 маршрута. 1. HTML-страница с формами и javascript на стороне клиента. 2. Маршрут, который будет возвращать scriptPage, вызывается с javascript на стороне клиента. 3. Маршрут для изменения версии serverSide на основе запроса на стороне клиента. Способ описания вашей проблемы показывает, что вы действительно не понимаете, как обращаться с маршрутами и клиентской/серверной стороной. Чтение экспресс-документации было бы полезно. –

ответ

0

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

exports.index = function(req, res) { 
    var data = someData.fetch(); 
    switch(req.format) { 
    case 'json': 
     res.json(data); 
     break; 
    default: 
     res.render('template', { 
     data:data 
    }); 
    } 
};