Javascript js:Can';t在发送邮件后设置邮件头

Javascript js:Can';t在发送邮件后设置邮件头,javascript,node.js,server,Javascript,Node.js,Server,目前我正在学习Node.js,我正在尝试创建一个购物清单应用程序,我正在尝试实现一个搜索路径,它检查查询是否与val匹配,下面是代码 const express = require('express'); const bodyParser = require('body-parser'); const app = express(); const port = 3000; //Array List let list = ['Fish', 'Lettuce', 'Chicken']; //

目前我正在学习Node.js,我正在尝试创建一个购物清单应用程序,我正在尝试实现一个搜索路径,它检查查询是否与val匹配,下面是代码

const express = require('express');
const bodyParser = require('body-parser');

const app = express();
const port = 3000;

//Array List 
let list = ['Fish', 'Lettuce', 'Chicken'];

//Set view engine to pug
app.set('view engine', 'pug');
//use bodyParser


app.get('/', function(request, response){
    response.render('list', {list});
});

app.get('/search', function(request, response){
   return list.map(function(val){
      if(request.query.search === val){
          return response.send('Yup you got ' + val);
        }
     response.send('Not found')
    });
});

app.get('/new-item', function(request, response){
    response.render('new');
});

app.post('/add-item', function(request, response){
   let add = response.send(request.body);
   list.push(add);
});

app.listen(port, function(){
    console.log('Listening on Port 3000');
});
现在问题出在
/search
路由的
if
条件上,我知道我出现错误的原因是因为我无法使用
响应。发送两次
,我正在寻找一种方法根据条件是否满足来发送任一响应。
谢谢你的帮助
谢谢

移动
响应。发送('notfound')
到循环之外。另外,您不应该使用
Array.map
在这里,而是使用
Array\find

app.get('/search', function(request, response) {
   let foundVal = list.find(function(val) {
     if (request.query.search === val) {
       return val;
     }
   });
   if (foundVal) {
     return response.send('Yup you got: ' + foundVal);
   }
   response.send('Not found');
});
response.send('notfound')
移出循环。另外,您不应该使用
Array.map
在这里,而是使用
Array\find

app.get('/search', function(request, response) {
   let foundVal = list.find(function(val) {
     if (request.query.search === val) {
       return val;
     }
   });
   if (foundVal) {
     return response.send('Yup you got: ' + foundVal);
   }
   response.send('Not found');
});

使用回调构建您的结构

app.get('/search', function(request, response){
    checkValue(list,request.query.search,function (result) {
        response.send({
            data : result
        });
    });

    function checkValue(list, value, callback) {
        var isHere = false;
        list.map(function(val){
            if(request.query.search === val){
                isHere = true;
            }
        });
        callback(isHere);
    }
});

使用回调构建您的结构

app.get('/search', function(request, response){
    checkValue(list,request.query.search,function (result) {
        response.send({
            data : result
        });
    });

    function checkValue(list, value, callback) {
        var isHere = false;
        list.map(function(val){
            if(request.query.search === val){
                isHere = true;
            }
        });
        callback(isHere);
    }
});
在这段代码中:

app.get('/search', function(request, response){
   return list.map(function(val){
      if(request.query.search === val){
          return response.send('Yup you got ' + val);
        }
        response.send('Not found')
    });
});
您正在执行
response.send()
内部的
.map()
回调,这意味着您可以轻松地多次调用它,您询问的错误表明您正在多次调用它。请记住,在
.map()
中返回的
不会脱离
.map()
。它仅从回调函数的该次迭代中返回,然后在您返回之后,
的下一次迭代将继续执行
.map()

如果要中断迭代,请切换到常规的
for
循环来执行迭代(不使用回调),然后您的
返回将执行您想要的操作,如下所示:

app.get('/search', function(request, response){
    for (let val of list) {
        if (request.query.search === val){
            return response.send('Yup you got ' + val);
        }
    }
    response.send('Not found')
});
在这段代码中:

app.get('/search', function(request, response){
   return list.map(function(val){
      if(request.query.search === val){
          return response.send('Yup you got ' + val);
        }
        response.send('Not found')
    });
});
您正在执行
response.send()
内部的
.map()
回调,这意味着您可以轻松地多次调用它,您询问的错误表明您正在多次调用它。请记住,在
.map()
中返回的
不会脱离
.map()
。它仅从回调函数的该次迭代中返回,然后在您返回之后,
的下一次迭代将继续执行
.map()

如果要中断迭代,请切换到常规的
for
循环来执行迭代(不使用回调),然后您的
返回将执行您想要的操作,如下所示:

app.get('/search', function(request, response){
    for (let val of list) {
        if (request.query.search === val){
            return response.send('Yup you got ' + val);
        }
    }
    response.send('Not found')
});

如果您的条件失败,请使用“else”。尝试将第二个条件放入elsei实际上会将其放入else块中,但如果您的条件失败,则仍然使用samwUse“else”。尝试将第二个条件放入elsei实际上会将其放入else块中,但Samw此代码仍然不起作用。如果在第二次迭代中找不到元素,将抛出错误。嘿@jfriend00你能帮我一下吗@ogbeh-当你充分描述当列表中有多个项目时,一些匹配,一些不匹配时,你期望的行为是什么,然后,也只有到那时,我才会花时间编辑我的代码,以匹配该描述。您当前没有说明所需的行为是什么。无法编写与不存在的规范匹配的代码。你现在的问题还不清楚。也许其他一些答案正确地猜到了你想要的东西,但是好的问题不需要猜测——它们准确地描述了所需行为的细节。@alexmac——OP根本不清楚他们所期望的行为是什么。正确猜测对您很好,但好的问题不需要猜测。此代码不起作用。如果在第二次迭代中找不到元素,将抛出错误。嘿@jfriend00你能帮我一下吗@ogbeh-当你充分描述当列表中有多个项目时,一些匹配,一些不匹配时,你期望的行为是什么,然后,也只有到那时,我才会花时间编辑我的代码,以匹配该描述。您当前没有说明所需的行为是什么。无法编写与不存在的规范匹配的代码。你现在的问题还不清楚。也许其他一些答案正确地猜到了你想要的东西,但是好的问题不需要猜测——它们准确地描述了所需行为的细节。@alexmac——OP根本不清楚他们所期望的行为是什么。很好,你猜对了,但是好的问题不需要猜对。嘿@alexmac你能帮我吗嘿@alexmac你能帮我吗