nodejs 将函数的返回值存储在变量中给我未定义
nodejs storing the returned value of a function inside a variable gives me undefined
你好,我在 nodejs 中有一个函数可以在文件中搜索特定的单词
我希望将此函数的返回值存储在变量中,以便在 POST API 中用于 mongodb 和 mongoose
但它 returns 由于某种原因 未定义
这是我的POSTAPI和里面的函数Filetostring()
router.post('/create',multer({ storage : storage}).any(), (req, res) => {
var sample = fs.readFileSync('./uploads/'+req.files[0].filename,'utf8');
function Filetostring(){
let arr = sample.split(/\r?\n/);
arr.forEach((step , idx)=> {
if(step.includes("step")){
console.log(step); //this gives me the first result I need
return step;
}
});
}
let steps = Filetostring()
console.log(steps) // This gives me undefined
var tc = new Testcase({
name: req.body.name,
upload: req.files[0].filename ,
run : steps, //this is where I want to put the returned value of the function
modify: req.body.modify,
delete: req.body.delete,
step1: req.body.step1,
step2: req.body.step2,
step3: req.body.step3,
step4: req.body.step4,
step5: req.body.step5,
step6: req.body.step6,
step7: req.body.step7,
});
//const file = req.file;
console.log(req.files[0].filename);
tc.save((err, doc) => {
if (err) { res.status(401).send("error") }
else {
res.status(200).send(doc)
}
});
});
这是我的控制台的图片和每个控制台日志的结果Console
谁能告诉我我做错了什么以及为什么变量 steps 未定义?
问题出在函数Filetostring
,forEach
方法没有return来自外部函数调用的值。当您在 forEach
回调中写入 return
时,您只是退出了回调执行,而不是 returned 来自 Filetostring
调用的值。
试试这个。
function Filetostring(){
let arr = sample.split(/\r?\n/);
// Find returns the first element that matches our criteria
const step = arr.find((step , idx)=> {
if (step.includes("step")) {
console.log(step); //this gives me the first result I need
return true;
}
return false;
});
return step;
}
更新:基于评论中的反馈。如果您需要过滤数组中的多个项目而不是第一个 filter
应该可以做到这一点。
function Filetostring(){
let arr = sample.split(/\r?\n/);
// Filter returns elements that matche our criteria
const steps = arr.filter((step , idx)=> {
return step.includes("step");
});
return steps;
}
你好,我在 nodejs 中有一个函数可以在文件中搜索特定的单词 我希望将此函数的返回值存储在变量中,以便在 POST API 中用于 mongodb 和 mongoose 但它 returns 由于某种原因 未定义
这是我的POSTAPI和里面的函数Filetostring()
router.post('/create',multer({ storage : storage}).any(), (req, res) => {
var sample = fs.readFileSync('./uploads/'+req.files[0].filename,'utf8');
function Filetostring(){
let arr = sample.split(/\r?\n/);
arr.forEach((step , idx)=> {
if(step.includes("step")){
console.log(step); //this gives me the first result I need
return step;
}
});
}
let steps = Filetostring()
console.log(steps) // This gives me undefined
var tc = new Testcase({
name: req.body.name,
upload: req.files[0].filename ,
run : steps, //this is where I want to put the returned value of the function
modify: req.body.modify,
delete: req.body.delete,
step1: req.body.step1,
step2: req.body.step2,
step3: req.body.step3,
step4: req.body.step4,
step5: req.body.step5,
step6: req.body.step6,
step7: req.body.step7,
});
//const file = req.file;
console.log(req.files[0].filename);
tc.save((err, doc) => {
if (err) { res.status(401).send("error") }
else {
res.status(200).send(doc)
}
});
});
这是我的控制台的图片和每个控制台日志的结果Console
谁能告诉我我做错了什么以及为什么变量 steps 未定义?
问题出在函数Filetostring
,forEach
方法没有return来自外部函数调用的值。当您在 forEach
回调中写入 return
时,您只是退出了回调执行,而不是 returned 来自 Filetostring
调用的值。
试试这个。
function Filetostring(){
let arr = sample.split(/\r?\n/);
// Find returns the first element that matches our criteria
const step = arr.find((step , idx)=> {
if (step.includes("step")) {
console.log(step); //this gives me the first result I need
return true;
}
return false;
});
return step;
}
更新:基于评论中的反馈。如果您需要过滤数组中的多个项目而不是第一个 filter
应该可以做到这一点。
function Filetostring(){
let arr = sample.split(/\r?\n/);
// Filter returns elements that matche our criteria
const steps = arr.filter((step , idx)=> {
return step.includes("step");
});
return steps;
}