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 未定义?

问题出在函数FiletostringforEach方法没有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;
 }