2017-10-02 2 views
0

Ich lerne Node.js im Moment, und ich versuche, eine Einkaufsliste Anwendung zu erstellen, und ich versuche, eine Suchroute zu implementieren, die überprüft, ob die Abfrage entspricht den val, hier ist der Codenode.js: Kopfzeilen können nicht gesetzt werden, nachdem sie gesendet wurden

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

Jetzt ist das Problem mit der if bedingten der /search Route ist, weiß, dass ich der Grund, warum ich die Störung erhalte ist, weil ich nicht die response.send zweimal verwenden kann, ich bin Suchen nach einer Möglichkeit, eine Antwort zu senden, basierend darauf, ob die Bedingung erfüllt ist. Jede Hilfe wird geschätzt Danke

+0

Verwenden Sie "else", wenn Ihre Bedingung fehlschlägt. –

+0

versuchen Sie setzen die zweite Bedingung in sonst – Ali

+0

ich tat es tatsächlich in einem anderen Block, aber immer noch die Samw – ogbeh

Antwort

1

Verschieben response.send('Not found') außerhalb der Schleife. Außerdem sollten Sie Array.map hier nicht verwenden, verwenden Array#find statt:

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

hey @alexmac können Sie bitte helfen Sie mir https://stackoverflow.com/questions/46484088/how-to-store- Data-in-Mongodb-Using-Mungo-und-Async-Wasserfall-Modell –

1

Ihre Struktur mit Rückrufe bauen.

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

In diesem Stück Code:

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

Du response.send() in Ihrem .map() Rückruf zu tun, was Sie bedeutet, kann es leicht mehr nennen als einmal, und der Fehler Sie zeigt darum gebeten, dass Sie es fordern mehr als einmal. Beachten Sie, dass die return innerhalb Ihrer .map() nicht aus der .map() bricht. Es kommt erst von dieser Iteration der Callback-Funktion zurück und dann wird die nächste Iteration des .map() direkt nach Ihnen return fortgesetzt.

Wenn Sie aus der Iteration brechen wollen, wechseln dann zu einem regulären for Schleife Ihre Iteration zu tun (die nicht einen Rückruf nicht verwendet) und dann return wird tun, was Sie so wollen:

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

Dieser Code wird nicht funktionieren. Wenn das Element bei der zweiten Iteration nicht gefunden wird, wird der Fehler ausgelöst. – alexmac

+0

hey @ jfriend00 können Sie mir bitte helfen https://stackoverflow.com/questions/46484088/how-to-store-data-in-mongodb-using-mongoose-and-async-waterfall-model –

+0

@ogbeh - Wenn Sie Beschreiben Sie vollständig, was Sie erwarten, wenn mehrere Elemente in "liste" vorhanden sind und einige übereinstimmen und andere nicht, dann und nur dann werde ich meinen Code entsprechend dieser Beschreibung bearbeiten. Sie sagen derzeit nicht, was das gewünschte Verhalten ist. Code kann nicht geschrieben werden, um mit einer Spezifikation übereinzustimmen, die nicht existiert. Ihre Frage, wie sie jetzt steht, ist unklar. Vielleicht haben andere Antworten richtig getippt, was Sie wollten, aber gute Fragen erfordern kein Raten - sie beschreiben die genauen Details des gewünschten Verhaltens. – jfriend00

Verwandte Themen