Post 请求触发所有 if else 语句并重定向它们

Post request triggering all if else statement and redirecting them

我正在创建一个登录页面作为我的第一个快递项目。当我发送带有 if/else 语句的 post 请求时,根据输入重定向它们时,它正在执行所有 if else 语句并触发 header 无法在它们发送到客户端后设置的消息.看了其他答案,发现是运行 all if else request。所以我删除了 else 语句。它工作正常,但我需要两个 if/else 以便在用户凭据不正确时将用户定向到页面。 请帮助我如何消除此错误。

const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.set('view engine','ejs');
app.use(bodyParser.urlencoded({extended: false}))

var data=[{fname:"john",pass:"dawd123"},{fname:"red",pass:"qwerty"}];

var nameStore="";
app.get("/",function(req,res){
  res.render("login");
});

app.post("/",(req,res)=>{
  n1 = req.body.uname;
  n2 = req.body.password;
  for(let i=0;i<data.length;i++){
    if(data[i].fname===n1 && data[i].pass===n2){
      nameStore = data[i].fname;
      res.redirect("/home");
    }
    else{
      res.redirect("/");
    }
  }
});

app.get("/home",(req,res)=>{
  res.render("home",{name:nameStore});
});

你做错的是有一个发送响应的循环。这是个坏主意。你想要实现的目标可以用更简洁的方式完成,就像这样:

const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.set('view engine','ejs');
app.use(bodyParser.urlencoded({extended: false}))

var data=[{fname:"john",pass:"dawd123"},{fname:"red",pass:"qwerty"}];

var nameStore="";
app.get("/",function(req,res){
  res.render("login");
});

app.post("/",(req,res)=>{
  n1 = req.body.uname;
  n2 = req.body.password;
  if(data.some(d=>d.fname === n1 && d.pass === n2)){
   return res.redirect("/home");
  }
  res.redirect("/");
 
});

app.get("/home",(req,res)=>{
  res.render("home",{name:nameStore});

来自 MDN 的关于 some 方法的解释:

The some() method tests whether at least one element in the array passes the test implemented by the provided function. It returns true if, in the array, it finds an element for which the provided function returns true; otherwise it returns false. It doesn't modify the array.

关于你做错了什么的更多细节:

路由器处理函数应该只 return 每个请求一个响应。在您的情况下,例如,如果用户不在 data 数组中,您最终会得到 data.lengthres.redirect("/"); 每个请求。