Интерполяция строки мопса для связанных файлов JavaScript - PullRequest
0 голосов
/ 16 мая 2018

Что я пытаюсь сделать

У меня есть веб-сервер NodeJS, который обслуживает файлы HTML и JavaScript с использованием Express и Pug . Это выглядит примерно так:

index.pug

html
    head
        title Hello
    body
        h1 Hello World!
        script(src='script.js')

app.js

const express = require('express');
var app = express();
app.set('view engine', 'pug');

app.get("/", (req, res) => {
    res.render("index", {
        age: 91,
        name: 'George P. Burdell'
    });
});
app.listen(8080);

script.js

var person = {
    age: #{age},
    name: #{name}
};

(взято и добавлено в пример GitHub )

Я хочу иметь возможность менять местозаполнители #{age} и #{name} на значения, указанные в функции res.render() (т.е. {age: 91, name: 'George P. Burdell'}).

Проблема

На данный момент значения не меняются местами, и консоль выдает ошибку, указывающую, что строки с заполнителями #{age} и #{name} не распознаются. Значения местозаполнения меняются только в том случае, если код JavaScript в script.js занесен в файл .pug в виде внутреннего скрипта, например:

index.pug

html
    head
        title Hello
    body
        h1 Hello World!
        script.
            var person = {
                age: #{age},
                name: #{name}
            };

Но то, что я хочу сделать, это поменять значения непосредственно из внешнего файла сценария, такого как в начальной настройке. Мне не повезло найти простой способ сделать это, кроме кода «жить» внутри файла .pug.

1 Ответ

0 голосов
/ 16 мая 2018

Итак, у меня есть обходной путь. Что вы можете сделать, это установить глобальные переменные во внутреннем теге сценария в файле .pug, который затем можно интерполировать с помощью pug. Вот что я имею в виду:

index.pug

html
    head
        title Hello
    body
        h1 Hello World!
        script.
            var age = #{age};
            var name = #{name};
        script(src='script.js')

script.js

var person = {
    age: age, // the age variable from the internal script is used
    name: name // the name variable from the internal script is used
};

app.js остается прежним!

EDIT

app.js

res.render("index", {
    age: 91,
    name: 'George P. Burdell'
});

должно быть

res.render("index", {
    age: "91",
    name: "'George P. Burdell'"
});

сохранить тип данных после замены!

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

...