我有一个Recaptcha站点密钥存储在.bashrc中,并且想在我的哈巴狗视图中使用环境变量。我的JS脚本的验证码部分位于“脚本”下。 pug文件中的“”部分。
我尝试使用#{}来插入pug JS变量,并且我已经通过“ route”传递了env变量,但无济于事。插值会在验证码请求中留出空白。
// INDEX ROUTE
var express = require('express');
var router = express.Router();
const request = require('request');
var textUtil = require('../utils/sendText');
router.get('/', function(req, res, next) {
res.render('index', { title: 'Phoenix Flight Fire Supply', siteKey: process.env.PHOENIX_CAPTCHA_SITE_KEY }); // Passing in 'siteKey'
});
//INDEX PUG FILE
doctype html
html
head
title= title
script(async, src='https://www.googletagmanager.com/gtag/js?id=UA-144999292-1')
script.
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-144999292-1');
meta(name='viewport' content='width=device-width, initial-scale=1')
meta(name='theme-color' content='#B61919')
link(rel='stylesheet', href='/stylesheets/style.css')
link(rel='stylesheet', href='/stylesheets/flickity.min.css' media='screen')
link(rel='icon' sizes='192x192' href='images/phoenixfirelogosolid.png')
script(src='javascripts/flickity.pkgd.min.js')
script(src='javascripts/libs/inflate.min.js')
script(src='https://cdnjs.cloudflare.com/ajax/libs/babylonjs/4.0.3/babylon.max.js')
script(src='https://d3js.org/d3.v3.min.js' language='JavaScript')
script(src='javascripts/liquidFillGauge.js' language='JavaScript')
script(src=`https://www.google.com/recaptcha/api.js?render=${siteKey}`)
link(rel='stylesheet' href='https://use.typekit.net/gmu0vhj.css')
link(rel='stylesheet' href='https://use.typekit.net/gmu0vhj.css')
link(rel='stylesheet' href='https://use.typekit.net/gmu0vhj.css')
body
block content
... (BODY)
script.
//RECAPTCA v3 LOAD
grecaptcha.ready(function() {
grecaptcha.execute(siteKey, {action: 'submitLead'}).then(function(token){
// add token value to form
document.getElementById('g-recaptcha-response').value = token;
});
});
虽然我没有收到任何错误,但是recaptcha无法正常工作,因为siteKey是'undefined'。本质上,哈巴狗预处理无法正常工作。
预处理无法识别“ siteKey”。如果我添加#{},则值为”,并且不会显示Recaptcha。
grecaptcha.ready(function() {
grecaptcha.execute(siteKey, {action: 'submitLead'}).then(function(token) {
// add token value to form
document.getElementById('g-recaptcha-response').value = token;
});
});</script></body></html>
最后一个注意事项:我检查了.bashrc文件,并且环境变量的拼写正确。关键是用引号引起来,我正在运行一个运行Nginx作为Express代理的Ubuntu 18.04环境。
谢谢您的帮助!
答案 0 :(得分:1)
在您的客户端JavaScript中,我认为您从未声明过siteKey
变量。
您可以尝试这样的事情吗?
script(src=`https://www.google.com/recaptcha/api.js?render=#{siteKey}`)
...
script.
const siteKey = #{siteKey}
//RECAPTCA v3 LOAD
grecaptcha.ready(function() {
grecaptcha.execute(siteKey, ...
如果这不起作用,我首先尝试将密钥手动复制到常量中,然后查看应用程序是否正常工作。