首页 > 解决方案 > '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)

标签: node.jsexpressstore

解决方案


我认为原因是你通过req.params了这是一个object并且你必须通过一个string


推荐阅读