Как заменить переменную Javascript перед обслуживанием с помощью fastify?
У меня есть несколько файлов JS, которые я хотел бы изменить, прежде чем их обслуживать.
Они вызываются с параметром, и я хочу, чтобы этот параметр был в файле при обслуживании.
Пример:
<script src="myjavascript.js?key=mykey"></script
myjavascript.js
var key = ${key} // <-- replaced with request.query.key
console.log(key)
Маршрут:
fastify.get('/include.js', async (request, reply) => {
let key
if (request.query.key) {
key = request.query.key
}
if (!key.length == 20) reply.code(400)
reply.view('server/assets/include.js', { key: key })
})
1 ответ
Решение
От reply.view
Я предполагаю, что вы пытаетесь использовать плагин point-of-view. Проблема в том, что вам нужно настроить движок представления, который будет обслуживать html. Вы можете передавать параметры в HTML-шаблоны, если это ваша цель. Пожалуйста, смотрите примеры в связанном репо.
Если ваша цель - обслуживать и генерировать файл на лету, то вы можете достичь этого с помощью литералов шаблона. Обратите также внимание, что вам нужно позвонить send
после того, как вы установили код answer.code:
const fastify = require('fastify')()
fastify
.get('/', (request, reply) => {
const { key } = request.query
if (key.length !== 20) reply.code(404).send({ error: 'Not Found' })
reply
.type('application/javascript; charset=UTF-8')
.send(`var key = ${key}; console.log(key);`)
})
fastify.listen(3000, err => {
if (err) throw err
console.log('Server is listening on port 3000')
})