node.js - 在nodeJS中传递变量
问题描述
我不确定它是如何被调用的,并且通过有限的搜索我没有找到我想要的东西,所以我会解释一下:
我有路由登录,其中我得到 2 个参数,键和回调 URL:
app.get('/login*', function (req, res) {
var adr = url.parse(req.url, true)
var key = adr.query.key
var callbackURL = adr.query.callbackURL
if (key == "key123") {
res.render('index', { resp: '', callbackURL: callbackURL })
} else {
res.render('error')
}
})
因此,如果键匹配,它将使用空响应和回调 URL 呈现 index.ejs。当用户尝试登录时,有没有办法可以稍后在“/提交”中传递该回调 URL?提交代码:
app.post('/submit', function (req, res) {
request.post({
headers: { 'content-type': 'application/json' },
url: <here to use callbackURL>,// <-- here
body: { 'login': req.body.login, 'password': req.body.password },
json: true
},
function (request, response) {
if (response.statusCode == 200) {
res.render('index', { resp: 'login succesfull' })
} else {
res.render('index', { resp: 'invalid login or password' })
}
})
})
解决方案
它在不同的函数中,因此该变量不可用。
你需要以某种方式通过它。
您可以在渲染页面时将其传递给客户端(实际上您已经将其传递给 render 方法),然后将其放在表单中的隐藏输入中,然后在提交端点时从表单数据中读取它叫。
或者,您可以将其存储在会话中,但这将面临竞争条件的风险。
推荐阅读
- oracle - 纯Perl DBI/DBD查询Oracle数据库
- ios - SpriteKit:无法点击覆盖的节点
- android - 带有 FirebaseJobDispatcher 的 Android 8.0 后台计划任务
- node.js - Nginx:proxy_pass + websocket + 基本认证 + Safari = 访问日志中的无限循环
- java - Spring @Transactional 在异常时始终如一地回滚事务
- machine-learning - 一热编码标签___多热编码输出_Keras
- python - 无法安装 PyMySQL
- c# - 具有复合键的 SortedDictionary:由 1 个属性索引并由另一个属性排序
- java - java.lang.IllegalStateException:另一个 SimpleCache 实例使用该文件夹:
- python - Pandas 将所有列的值连接到一个新的列列表中