Javascript js:Can';t在发送邮件后设置邮件头
目前我正在学习Node.js,我正在尝试创建一个购物清单应用程序,我正在尝试实现一个搜索路径,它检查查询是否与val匹配,下面是代码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']; //
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你能帮我吗