node.js 中的“用户未定义”

问题描述 投票:0回答:2

我使用 EJS 作为我的模板引擎。我的浏览器说“用户”未定义,但在我的 server.js 文件中,我将其定义为

var users = require("./routes/userws)
当我启动服务器并访问应用程序时,我在浏览器中收到以下错误消息(Chrome) :

ReferenceError: C:\Users\Corfi\Google Drive\Coding\webdev\site\views\index.ejs:27
    25| <h1>hello</h1>

    26|     <ul>

 >> 27|     <% users.forEach(function(user) { %>

    28|         <li><%= user.first_name +  " " + user.last_name %> - <a  data-id="<%= user._id%>" class= "deleteUser" href="#">Delete</a></li>

    29|    <% })%>

    30|    </ul> 


users is not defined
    at eval (eval at compile (C:\Users\Corfi\Google Drive\Coding\webdev\site\node_modules\ejs\lib\ejs.js:549:12), <anonymous>:37:8)
    at returnedFn (C:\Users\Corfi\Google Drive\Coding\webdev\site\node_modules\ejs\lib\ejs.js:580:17)
    at tryHandleCache (C:\Users\Corfi\Google Drive\Coding\webdev\site\node_modules\ejs\lib\ejs.js:223:34)
    at View.exports.renderFile [as engine] (C:\Users\Corfi\Google Drive\Coding\webdev\site\node_modules\ejs\lib\ejs.js:437:10)
    at View.render (C:\Users\Corfi\Google Drive\Coding\webdev\site\node_modules\express\lib\view.js:127:8)
    at tryRender (C:\Users\Corfi\Google Drive\Coding\webdev\site\node_modules\express\lib\application.js:640:10)
    at EventEmitter.render (C:\Users\Corfi\Google Drive\Coding\webdev\site\node_modules\express\lib\application.js:592:3)
    at ServerResponse.render (C:\Users\Corfi\Google Drive\Coding\webdev\site\node_modules\express\lib\response.js:971:7)
    at C:\Users\Corfi\Google Drive\Coding\webdev\site\routes\index.js:6:9
    at Layer.handle [as handle_request] (C:\Users\Corfi\Google Drive\Coding\webdev\site\node_modules\express\lib\router\layer.js:95:5)
    at next (C:\Users\Corfi\Google Drive\Coding\webdev\site\node_modules\express\lib\router\route.js:137:13)
    at Route.dispatch (C:\Users\Corfi\Google Drive\Coding\webdev\site\node_modules\express\lib\router\route.js:112:3)
    at Layer.handle [as handle_request] (C:\Users\Corfi\Google Drive\Coding\webdev\site\node_modules\express\lib\router\layer.js:95:5)
    at C:\Users\Corfi\Google Drive\Coding\webdev\site\node_modules\express\lib\router\index.js:281:22
    at Function.process_params (C:\Users\Corfi\Google Drive\Coding\webdev\site\node_modules\express\lib\router\index.js:335:12)
    at next (C:\Users\Corfi\Google Drive\Coding\webdev\site\node_modules\express\lib\router\index.js:275:10)
    at Function.handle (C:\Users\Corfi\Google Drive\Coding\webdev\site\node_modules\express\lib\router\index.js:174:3)
    at router (C:\Users\Corfi\Google Drive\Coding\webdev\site\node_modules\express\lib\router\index.js:47:12)
    at Layer.handle [as handle_request] (C:\Users\Corfi\Google Drive\Coding\webdev\site\node_modules\express\lib\router\layer.js:95:5)
    at trim_prefix (C:\Users\Corfi\Google Drive\Coding\webdev\site\node_modules\express\lib\router\index.js:317:13)
    at C:\Users\Corfi\Google Drive\Coding\webdev\site\node_modules\express\lib\router\index.js:284:7
    at Function.process_params (C:\Users\Corfi\Google Drive\Coding\webdev\site\node_modules\express\lib\router\index.js:335:12).

我的server.js文件如下:

//Declare which modules are required
var express = require("express");
var cookieParser = require("cookie-parser");
var flash = require("connect-flash");
var session = require("express-session");
var passport = require("passport");
var LocalStrategy = require("passport-local").Strategy;
var bodyParser = require("body-parser");
var path = require("path");
var expressValidator = require("express-validator");

//MongoDB
var mongo = require("mongo");
//MongoDb - Mongojs
var mongojs = require("mongojs");
var db = mongojs("bank", ["users"])
var ObjectId = mongojs.ObjectId
//MongoDB - Mongoose
var mongoose = require("mongoose")
var mongooseConnect = mongoose.connect('mongodb://localhost/bank', {
  useMongoClient: true,
});

//Routes
var routes = require("./routes/index");
var users = require("./routes/users");

//Express server
var server = express();

//Avoid errors
server.disable("x-powered-by");

//View Engine                                                   
server.set("view engine", "ejs");  
server.set("views", path.join(__dirname, "views"));

//Body Parser Middleware
server.use(bodyParser.json());
server.use(bodyParser.urlencoded({extended: false}));

//Express Session Middleware
server.use(session({
    secret: "secret",
    saveUninitialized: true,
    resave: true
}))

//Passport Setup
server.use(passport.initialize());
server.use(passport.session());


//Express-Validator Middleware
server.use(expressValidator({
  errorFormatter: function(param, msg, value) {
      var namespace = param.split('.')
      , root    = namespace.shift()
      , formParam = root;

    while(namespace.length) {
      formParam += '[' + namespace.shift() + ']';
    }
    return {
      param : formParam,
      msg   : msg,
      value : value
    };
  }
}));

//Connect Flash Middleware
server.use(flash());


// Global Vars
server.use(function(req, res, next) {
    res.locals.errors = null;
//Global vars - Connect Flash
    res.locals.success_msg = req.flash("success_msg");
    res.locals.error = req.flash("error");
    next();
})

//Set up static path; set up delivery of CSS and client-side JavaScript
server.use(express.static(path.join(__dirname, 'public')));
// Mongojs: - Find everything
db.users.find(function (err, docs) {
    console.log(docs);
    //Routing
    server.get("/", function(req, res) {
        res.render("index", {
            title: "Customers",
            users: docs
        });
    })

})

//Routing Middleware
server.use("/", routes);
server.use("/users", users)

//Form validation
server.post("/users/add", function(req, res) {
    req.checkBody("first_name", "First Name is Required").notEmpty();
    req.checkBody("last_name", "Last Name is Required").notEmpty();
    req.checkBody("email", "Email is Required").notEmpty();

    //Get errors
    var errors = req.validationErrors();
    //If there are any errors --> returns truthy value
    if (errors) {
       //Render index page with applicable error messages 
        res.render("index", {
            title: "Customers",
            users: users,
            errors: errors
        });
    }
        //If there are no errors --> Request first name, last name, and email adress, and log them in console.
    else {
         var newUser = {
        first_name: req.body.first_name,
        last_name: req.body.last_name,
        email: req.body.email
    }};
    //When form is submitted, log erros if there are any,
    //and create a new user if there aren't any errors.
    db.users.insert(newUser, function(err, result) {
        if(err) {
        console.log(err);
        }
        else {
        res.redirect("/");
        }
    })
    }
    )
//End form validation

    //Set up user delete functionality
    server.delete("/users/delete/:id", function(req, res) {
        db.users.remove(
        {
        _id: ObjectId(req.params.id)
        }, function(err, result) {
        if(err){
             console.log(err);};
        res.redirect("/");})
        })
    ;

   //Set Port
   var port = 5000
   server.set("port", process.env.PORT || 5000);
   server.listen(port, function() {
        console.log("Server started on Port" + " " +port)
   })

Index.ejs 文件:

<% include partials/header  %>
<h1>Add Customer</h1>
<% if(errors) {%>
    <ul>
    <%errors.forEach(function(error) { %>
        <li><%= error.msg %></li>
   <% })%>
    </ul>
<% } %>
<form method = "POST" action="/users/add">
    <label>First Name</label> <br>
    <input type="text" name="first_name">
    <br>
    <label>Last Name</label> <br>
    <input type="text" name="last_name">
    <br>
    <label>E-mail</label> <br>
    <input type="email" name="email">
    <br><br>
    <input type="submit" value="Submit">
</form> 
<div id="testjs">
Hello there    
</div>   
<h1>hello</h1>
    <ul>
    <% users.forEach(function(user) { %>
        <li><%= user.first_name +  " " + user.last_name %> - <a  data-id="<%= user._id%>" class= "deleteUser" href="#">Delete</a></li>
   <% })%>
   </ul> 
   <% include partials/footer %>   

我认为我没有更多相关细节需要添加,但 Stackoverflow 坚持要求我添加更多细节,所以我真的不知道要在这里输入什么,等等,等等

javascript node.js ejs
2个回答
1
投票

你没有在调用你的index.ejs的路由中定义和传递

users
。 在为此 URL 定义的函数中查看您的文件
/routes/index

在 res.render 中,如果您希望能够在模板/视图中访问它,则需要传递

users
变量

app.get('/', function (req, res) {
  res.render('index', { users: '[usersList]'});
});

只有从路由传递到

res.render
内的模板的变量才能在 HTML 中访问。所有其他内容在 Nodejs 中都可用,但在模板引擎中不可用


0
投票

Olha,eu também acabo de ter esse mesmo Problema ainda a alguns minutos, mais vocês são foda e vi aqui esse exemplo and lembrei que o erro estava sendo mesmo mesmo em não informar essa variavel

© www.soinside.com 2019 - 2024. All rights reserved.