Как вывести содержимое Jade через JSON?(Node.js) - PullRequest
1 голос
/ 24 февраля 2012

Несколько месяцев назад я написал веб-приложение для создания видеогалереи в CodeIgniter и пытаюсь переместить серверную часть в Node, используя Express + Jade для создания контента.Версия PHP отправляет JSON во внешний интерфейс, часто включающий значительную часть HTML.

Я бы хотел отобразить бит HTML с помощью Jade (поскольку это то, для чего он предназначен), но, очевидно, я хочу вывести его в формате JSON, а не прямо в браузер.Это может быть до боли очевидно, как это сделать, но я просто не могу понять это сейчас ... Любая помощь очень ценится.

Оригинальный PHP

ob_start();

for ($i = $start; $i < $end; $i++)
{
    $v = $videos[$i];
    echo '<a id="video-' . $v->url . (isset($v->otherid) ? '-' . $v->otherid : '') . '" href="#!' . Settings::$pretty_link . '/' . $v->url . (isset($v->otherid) ? '/' . $v->otherid : '') . '" class="Box' . ($i == $start ? " Batch" : "") . '" title="Click to view the ' . $v->name . '"><img src="' . site_url('images/thumb/' . $v->image) . '" alt="The ' . $v->name . '" /><span>' . $v->name . '</span></a>';
}

$data[$html] = ob_get_clean();

// Add some other things to $data

echo json_encode($data);

Блестящий новый Джейд

- var v
- for (var i = view.start; i < view.end; i++) {
-   v = view.videos[i]
    a(id="#{v.url + (v.otherid === null ? "" : "-" + v.otherid)}", 
        href="#!#{settings.prettyLink + "/" + v.url + (v.otherid === null ? "" : "/" + v.otherid)}/",
        class="Box #{i == view.start ? "Batch" : ""}",
        title="Click to view the #{v.name}"
    )
        img(src="#{settings.siteUrl}images/thumb/#{v.image}", alt="The #{v.name}")
        span #{v.name}
- }

Как сделать строку $data[$html] = ob_get_clean();?(И, возможно, также json_encode, хотя у меня в настоящее время большие надежды на JSON.stringify.:)

Редактировать Как и запрашивал @loganfsmyth, код, используемый для визуализации файла Jadeв основном так же, как примеры Экспресс).

res.render("search", { view: view, settings: vgSettings.app });

Ответы [ 2 ]

5 голосов
/ 24 февраля 2012

Не пробовал, хотя из Экспресс документов , это должно работать:

res.render('yourJadeView', { someOptionalLocal: 'someValue' }, function(err, string) {
    res.json({html: string});
});
0 голосов
/ 06 сентября 2012

Если вы хотите вывести только JSON, это должно сделать работу:

    res.json({ yourValue: 'hi there' });

Код статуса может быть добавлен:

    res.json(obj, status) 

Например:

    res.json( { workouts: docs }, 200);  

Или, можно поменять местами, как в:

    res.json(status, obj);

При использовании res.json нет необходимости указывать заголовки или вызывать .end (). Это будет делать все по умолчанию.

...