簡體   English   中英

類型錯誤:res.end 不是函數。 在護照 npm 包中

[英]TypeError: res.end is not a function. In passport npm package

這是錯誤。 我被困在其中。 看看這個..

TypeError: res.end is not a function
    at allFailed (C:\Users\sam\OneDrive\desktop\WebDevPractice\secret-files\node_modules\passport\lib\middleware\authenticate.js:174:11)
    at attempt (C:\Users\sam\OneDrive\desktop\WebDevPractice\secret-files\node_modules\passport\lib\middleware\authenticate.js:180:28)
    at Strategy.strategy.fail (C:\Users\sam\OneDrive\desktop\WebDevPractice\secret-files\node_modules\passport\lib\middleware\authenticate.js:302:9)
    at Strategy.authenticate (C:\Users\sam\OneDrive\desktop\WebDevPractice\secret-files\node_modules\passport-local\lib\strategy.js:75:17)
    at attempt (C:\Users\sam\OneDrive\desktop\WebDevPractice\secret-files\node_modules\passport\lib\middleware\authenticate.js:366:16)
    at authenticate (C:\Users\sam\OneDrive\desktop\WebDevPractice\secret-files\node_modules\passport\lib\middleware\authenticate.js:367:7)
    at C:\Users\sam\OneDrive\desktop\WebDevPractice\secret-files\app.js:70:37
    at C:\Users\sam\OneDrive\desktop\WebDevPractice\secret-files\node_modules\passport-local-mongoose\index.js:247:28
    at processTicksAndRejections (internal/process/task_queues.js:97:5)

// 請看寄存器路由。

require('dotenv').config();
const bodyParser = require("body-parser");
const express = require("express");
const ejs = require("ejs");
const mongoose = require("mongoose");
const session = require("express-session");
const passport = require ("passport");
const passportLocalMongoose = require("passport-local-mongoose");

const app = express();
app.use(bodyParser.urlencoded({extended: true}));
app.use(express.static("public"));
app.set("view engine","ejs");
app.use(session({
    secret : "thisIsMyLitlleSecret",
    resave : false,
    saveUninitialized : false
}));
app.use(passport.initialize());
app.use(passport.session());

console.log(process.env.API_KEY);

mongoose.connect("mongodb://localhost:27017/userDB" , { useNewUrlParser: true , useUnifiedTopology: true });
mongoose.set("useCreateIndex", true);

const userSchema = new mongoose.Schema({
    email : String,
    password : String
});

userSchema.plugin(passportLocalMongoose);

const User = mongoose.model("User",userSchema);

passport.use(User.createStrategy());
 
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());


app.get("/", function(req,res){
    res.render("home");
});

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

app.get("/secrets", function(req,res){
    if(req.isAauthenticated){
        res.render("secrets");
    }
    else{
        res.redirect("/login")
    }
})
app.get("/register", function(req,res){
    res.render("register");
});

app.post("/register", function(req,res){

  User.register({username : req.body.username}, req.body.password, function(err, user){
      if(err){
          console.log(err);
          res.redirect("/register");
      }
      else
      passport.authenticate("local")(res,req,function(){
          res.redirect("/secrets");
      });
  });

});



app.post("/login",function(req,res){

});

app.listen(3000,function(req,res){
    console.log("Server running on port 3000!!");
});

//這是注冊ejs頁面

<%- include('partials/header') %>
<div class="container mt-5">
  <h1>Register</h1>

  <div class="row">
    <div class="col-sm-8">
      <div class="card">
        <div class="card-body">

          <!-- Makes POST request to /register route -->
          <form action="/register" method="POST">
            <div class="form-group">
              <label for="email">Email</label>
              <input type="email" class="form-control" name="username">
            </div>
            <div class="form-group">
              <label for="password">Password</label>
              <input type="password" class="form-control" name="password">
            </div>
            <button type="submit" class="btn btn-dark">Register</button>
          </form>

        </div>
      </div>
    </div>

    <!-- <div class="col-sm-4">
      <div class="card social-block">
        <div class="card-body">
          <a class="btn btn-block" href="/auth/google" role="button">
            <i class="fab fa-google"></i>
            Sign Up with Google
          </a>
        </div>
      </div>
    </div> -->

  </div>
</div>

<%- include('partials/header') %>

如何解決?

通常護照是中間件。

app.post(‘/register’, passport.authenticate(‘local’), (req, res) => {
// 
}

另外為什么它在注冊路線上沒有登錄?

你有一個小錯誤,在你的代碼中“req”必須在“res”之前,這是你的代碼:

 passport.authenticate("local")(res,req,function(){
          res.redirect("/secrets");
      });

只需交換您的請求和響應的位置,應該是 - (req, res),然后它就會起作用。 這是它應該是什么,看起來相似,很難發現區別:

 passport.authenticate("local")(req, res, function(){
          res.redirect("/secrets");
      });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM