Я пытался придумать лучший способ передать переменную из бэкэнда во фронтенд. Прямо сейчас делаю что-то вроде этого.
У меня есть шаблон MVC, поэтому при попадании в маршрут
app.get('/fil', middleWare.isLoggedIn, user.fil)
... trough node выполняет некоторые запросы к БД и передает данные.
exports.fil = async (req, res) => {
try {
faktura = await Lan.find().populate('client', 'namn kundnr')
res.status(200).render('pages/createInvoice', {
faktura: faktura
});
} catch (err) {
return res.status(500).send({
message: err.message || "Some error occurred while retrieving datas."
});
};
};
... он генерирует страницу с помощью EJS (я люблю EJS), а затем передает ее клиенту / пользователю.
И в .ejs-файле, который обслуживается клиентом / пользователем, я добавляю следующее
<script>
var fakturor = <%- JSON.stringify(faktura) %>;
</script>
Это означает, что я использую переменную и работаю с ней с помощью JS.
И здесь возникает мой вопрос. Это хороший способ сделать это или есть другой способ справиться с этим?
Я предполагаю, что одна из идей состоит в том, чтобы позволить пользователю запрашивать БД прямо со страницы, но в моем случае я считаю, что на самом деле это было бы не лучше для пользователя (пользователь получит как 100 разных строк, которые они будут возможность фильтровать, а затем загружать файл)
Но есть ли другие способы сделать это без тега сценария? Как я уже сказал, я предполагаю, что можно использовать ajax-вызов от JS / клиента, но не могли бы вы сделать это по-другому? Может ли EJS сделать это по-другому?
@INDRESHKHANDELWAL, расскажи подробнее? response.json?
response.json () принимает объект json и отправляет ему запрошенный http-запрос. Итак, если вы скажете, что вы хотите отправить переменную x, это можно сделать следующим образом => response.json ({x: value})
Хм. Я это проверю. Спасибо за информацию. У вас случайно нет хорошей ссылки, по которой я могу прочитать о ней?
ejs используется в основном для статических страниц, если вы хотите создать динамическую страницу, я бы поискал структуру одностраничного приложения, такую как angular и react. если вы все еще хотите использовать ejs, вы можете использовать вызов ajax на сервер для загрузки переменной из БД. Я бы никогда не запрашивал напрямую из внешнего интерфейса в БД, потому что тогда вы не контролируете безопасность сервера, всегда проходите через BE.
Я не очень заинтересован в создании СПА, поскольку считаю это излишним для моих небольших проектов. Хотя я мог ошибаться. Идея ajax-call через BE - это то, что я до сих пор собирал как возможность, и я думаю, что проверю ее. Дело в том, что я передаю массив, затем пользователь может внести в него некоторые изменения, а затем «сохранить» его как массив. Затем он сохраняет это в БД, но также копирует массив> xml, и у пользователя появляется запрос, если он хочет загрузить файл. Я не уверен, как я могу решить ту часть, где пользователи могут что-то менять, если нет массива, переданного из BE.
используйте response.json и отправьте объект Json, содержащий полезную нагрузку, которую вы хотите отправить