node.js - 'store.get' 的问题......但是其他 API 调用似乎可以正常工作
问题描述
我正在使用带有 Node.js Express 脚本的“商店”(“ https://www.npmjs.com/package/store ”)模块。它对我来说似乎主要功能,我可以根据随机生成的 ID 创建一个存储键,我能够将数据记录到存储中,并循环遍历“键”和“值”以确保它们存在。我的问题是“store.get”命令没有返回单个值……这是我的代码:
...
var bodyParser = require('body-parser');
const shortid = require('shortid');
// create application/x-www-form-urlencoded parser
var urlencodedParser = bodyParser.urlencoded({ extended: false })
var _newToken = shortid.generate();
store.set(_newToken, { name: user.username, birthdate: user.birthdate, joinup: user.legacy, los: user.service, email: user.email })
//works fine, information is recorded in the store using a "key" of "_newToken" (a randomly generated ID)
res.redirect('/members/dash/' + _newToken);
...
app.get('/members/dash/:tempid', urlencodedParser, function (req, res) {
var _member_info = [];
console.log(req.params); //works fine, prints the randomly generated ID 'key' in the URL parameter...
// Loop over all stored values
store.each(function(value, key) {
console.log(key, '==', value) //works fine, prints key and each value to console...
_member_info.push(JSON.stringify(value));
});
console.log('contents of member array: ' + _member_info); //works fine, prints seeded array to console...
console.log('RETREIVE NAME: ' + store.get(req.params).name); //throws 'TypeError: Cannot read property 'name' of undefined' ...why??
// Remove current entry
store.remove(req.params); //seems to work fine, no error
});
在此之前有没有人使用过这个模块可以解释我的问题是什么?传递临时数据似乎是一个非常好的解决方案,但是我不明白为什么我不能使用'.get'命令访问存储信息的各个部分......当'store.set','store.each ',和 'store.remove' 似乎都在工作。我提前谢谢你。
我进行了以下修改...改为将字符串传递给“store.get”命令,但是我仍然收到相同的错误...
var _member_convert = JSON.stringify(req.params);
var _splits = _member_convert.split(":");
console.log('TEST RETRIEVE: ' + store.get(_splits[1]).name); //throws same error as previous
这是控制台日志的输出:
console.log(req.params);
console.log('req.params JSON: ' + _member_convert + " ...splits " + _splits);
console.log('TEST RETRIEVE: ' + store.get(_splits[1]).name); //error below throws here
{ tempid: 'xg_KO6Z9' }
req.params JSON: {"tempid":"xg_KO6Z9"} ...splits {"tempid","xg_KO6Z9"}
xg_KO6Z9 == { name: 'admin', //printout from the 'store.each' here
birthdate: '3-14-1982',
joinup: '2019-12-16',
los: 'unknown',
email: 'me@somehost.com' }
TypeError: Cannot read property 'name' of undefined //'store.get' error thrown
at c:\Users\develop\nodejs\easyrtc_p2p\p2p_server_H.js:1658:54
at Layer.handle [as handle_request] (c:\Users\develop\nodejs\easyrtc_p2p\node_modules\express\lib\router\layer.js:95:5)
at next (c:\Users\develop\nodejs\easyrtc_p2p\node_modules\express\lib\router\route.js:137:13)
at urlencodedParser (c:\Users\develop\nodejs\easyrtc_p2p\node_modules\body-parser\lib\types\urlencoded.js:91:7)
at Layer.handle [as handle_request] (c:\Users\develop\nodejs\easyrtc_p2p\node_modules\express\lib\router\layer.js:95:5)
at next (c:\Users\develop\nodejs\easyrtc_p2p\node_modules\express\lib\router\route.js:137:13)
at Route.dispatch (c:\Users\develop\nodejs\easyrtc_p2p\node_modules\express\lib\router\route.js:112:3)
at Layer.handle [as handle_request] (c:\Users\develop\nodejs\easyrtc_p2p\node_modules\express\lib\router\layer.js:95:5)
at c:\Users\develop\nodejs\easyrtc_p2p\node_modules\express\lib\router\index.js:281:22
at param (c:\Users\develop\nodejs\easyrtc_p2p\node_modules\express\lib\router\index.js:354:14)
解决方案
我认为原因是你通过req.params
了这是一个object
并且你必须通过一个string
推荐阅读
- sql-server - 如何从 AWS Lambda .Net Core 应用程序 API 连接到 AWS RDS SQL Server?
- sql - 在 select 语句中使用除法运算
- python - 如何在熊猫数据框中将注释作为一行附加
- perl - 在 Windows 上运行单行时出现意外字符
- c# - Unity:使用触摸抓取移动旋转时,相机跳动/抖动
- php - 如何在表中插入IP地址?
- scala - 为什么“def put(x: Int): Unit”有效,但“def put(x: Int): ()”无效?
- jquery - 如何在 blueimp 上传器开始多文件上传之前进行 AJAX 调用
- reactjs - 同一屏幕上的可重用组件覆盖以前的组件
- php - 使用 PHP curl 查询 mongodb