node.js:发送后无法设置标头

时间:2017-10-02 08:13:27

标签: javascript node.js server

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

if

现在问题出在response.send路由的<div class="lastSearch" style="display:none"> <input type="hidden" data-field-no="193" data-value="asd"> <input type="hidden" data-item-type="1" data-item-no="12"> </div> 条件,我知道我得到错误的原因是因为我无法使用<div class="divBody"> <label style="top:113.6px;left:32px;width:86.4px;height:12.8px;" data-field-no="190">ID</label> <label style="top:67.2px;left:32px;width:86.4px;height:12.8px;" data-field-no="191">Ime</label> <label style="top:20.8px;left:32px;width:86.4px;height:12.8px;" data-field-no="192">Tekst</label> <input style="top:19.2px;left:123.2px;width:152px;height:16px;" data-field-no="193" id="input-0" type="text" data-param-type="0" value=""> <input style="top:65.6px;left:123.2px;width:152px;height:16px;" data-field-no="194" id="input-1" type="text" data-param-type="0" value=""> <input style="top:112px;left:123.2px;width:152px;height:16px;" data-field-no="195" id="input-2" type="number" data-param-type="1" value=""> </div> 两次,我正在寻找根据条件是否满足发送任一响应的方法。 任何帮助表示赞赏 感谢

3 个答案:

答案 0 :(得分:1)

response.send('Not found')移到循环之外。此外,您不应在此使用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');
});

答案 1 :(得分:1)

使用回调构建您的结构。

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);
    }
});

答案 2 :(得分:0)

在这段代码中:

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(),这意味着您可以轻松地多次调用它,而您询问的错误表明您多次调用它。请注意,return中的.map()不会突破.map()。它只从回调函数的迭代返回,然后在.map()之后继续return的下一次迭代。

如果你想要突破迭代,那么切换到常规的for循环进行迭代(不使用回调)然后你的return会做你想要的这样:

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')
});