【问题标题】:res.render throwing error Node.JSres.render 抛出错误 Node.JS
【发布时间】:2017-10-08 00:35:10
【问题描述】:

我一直在尝试制作这个博客,但在渲染页面时它会抛出“Res.Render is not a function...”

    let express = require("express"),
    app = express(),
    bodyParser = require("body-parser"),
    methodOV = require("method-override"),
    mongoose = require("mongoose"),
    passport = require("passport"),
    pL = require("passport-local"),
    pLM = require("passport-local-mongoose"),
    User = require("./user.js");

mongoose.connect("mongodb://localhost/max");

let maxBlog = new mongoose.Schema({
    title: String,
    author: String,
    content: String
});

let Blog = mongoose.model('Blog', maxBlog);

app.use(express.static("public"));

app.use(bodyParser.urlencoded({ extended: false }))

app.use(bodyParser.json());

app.use(methodOV("_method"));

app.set('view engine', 'ejs');

//AUTH

app.use(passport.initialize());
app.use(passport.session());

passport.use(new pL(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());

app.post("/register", (req, res) =>{
    User.register(new User({username: req.body.username}), req.body.password, function(err, user){
        if(err){
            console.log(err);
            return res.render('register');
        }
        passport.authenticate("local")(req, res, function(){
           res.redirect("/secret");
        });
    });
});

// LOGIN ROUTES
app.get("/login", (req, res) =>{
   res.render("login"); 
});
//login logic
app.post("/login", passport.authenticate("local", {
    successRedirect: "/secret",
    failureRedirect: "/login"
}) ,(req, res) =>{
});

app.get("/logout", (req, res) => {
    req.logout();
    res.redirect("/");
});


const isLoggedIn = (req, res, next) =>{
    if(req.isAuthenticated()){
        return next();
    } else {
      res.redirect("/login");
    }
};

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

app.get("/", (req,res) => {
    res.redirect("/home");
});

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

app.get("/blog", (req,res) => {
    Blog.find({},(err,res) => {
        if (err){
            res.send("An unexpected error occured. Please try again later.");
        } else {
            res.render("blog",{blogs:res});
        }
    });
});

app.post("/blog",isLoggedIn,(req,res) => {
    Blog.create({
        title: req.body.t,
        author: req.body.a,
        content: req.body.c
    }), (err,create) => {
        if (err){
            res.send("There was an error. Try again later.");
        } else {
            res.render("blogs");
        }
    };
});

app.get("/blog:id",(req,res) => {
    Blog.findById(req.params.id,(err,find) => {
        if (err){
            res.send("An error occured. Please try again later.");
        } else {
            res.render("show",{blog:find});
        }
    });
});

app.put("/blogs:id",isLoggedIn,(req,res) => {
    Blog.findByIdAndUpdate(req.params.id,({
        content: req.body.c,
        author: req.body.a
    }),(err,update) => {
        if (err){
            res.send("An error occured. Please try again later.");
        } else {
            res.redirect("/blogs"+req.params.id);
        }
    });
});

app.listen(8080);

请帮忙!谢谢你,Ben 这一直困扰着我很多时间。这很奇怪,所有解决方案都没有奏效。不幸的是,我尝试了很多东西,但没有任何效果。非常感谢。

【问题讨论】:

  • 哪个函数抛出错误?
  • 这是错误:TypeError: res.render is not a function at Blog.find (/Users/ben/Desktop/ShoeAdict/app.js:92:8) at Query. ( /Users/ben/Desktop/ShoeAdict/node_modules/mongoose/lib/model.js:3911:16) 在 /Users/ben/Desktop/ShoeAdict/node_modules/kareem/index.js:273:21 在 /Users/ben/ Desktop/ShoeAdict/node_modules/kareem/index.js:131:16 at _combinedTickCallback (internal/process/next_tick.js:73:7) at process._tickCallback (internal/process/next_tick.js:104:9)
  • 听起来像是范围问题。您正在尝试在另一个函数中调用 res.render,该函数也有一个没有渲染函数的 res 参数
  • 谢谢!它奏效了。
  • 很高兴它有帮助。标记为正确答案会很棒。

标签: javascript css node.js ejs


【解决方案1】:

这是由于参数定义问题。

您可以尝试将第一个函数参数的名称更改为response

app.get("/blog", (req,response) => {
    Blog.find({},(err,res) => {
        if (err){
            response.send("An unexpected error occured. Please try again later.");
        } else {
            response.render("blog",{blogs:res});
        }
    });
});

【讨论】:

  • 请注意实际上是范围问题,更多的是“隐藏”或“重新定义”问题。 req 变量都在范围内,但越接近“隐藏”级别越高。无论如何,这可能是解决方案。仅供参考,还需要在此代码中修复 res.send()
【解决方案2】:

我在创建一个名为“res”的变量时遇到了同样的错误,但“res”是我已经声明的“function(req, res)”的一部分。我把其中一个改成了resp,问题就解决了。

【讨论】:

    猜你喜欢
    • 2021-11-13
    • 2017-09-23
    • 2016-03-10
    • 1970-01-01
    • 2018-11-12
    • 2019-06-15
    • 2014-05-30
    • 2019-01-03
    • 2015-04-07
    相关资源
    最近更新 更多