search

Home  >  Q&A  >  body text

javascript - nodejs在一个页面下显示mongodb数据库里的内容,页面出现is not defined错误,是哪里出了问题?

想在一个页面显示房间信息,于是照着一个curd的demo来写自己的项目,但是打开后出现如下错误:

ReferenceError: E:\code\kk\SecretChat-master\views\roomview.html:51
    49|     </thead>

    50|     <tbody>

 >> 51|     <% rooms.forEach(function( room ){ %>

    52|     <tr>

    53|         <td><%=room._id%></td>

    54|         <td><%= room.roomName %></td>


rooms is not defined
    at eval (eval at compile (E:\code\kk\SecretChat-master\node_modules\ejs\lib\ejs.js:524:12), <anonymous>:14:8)
    at returnedFn (E:\code\kk\SecretChat-master\node_modules\ejs\lib\ejs.js:555:17)
    at tryHandleCache (E:\code\kk\SecretChat-master\node_modules\ejs\lib\ejs.js:203:34)
    at View.exports.renderFile [as engine] (E:\code\kk\SecretChat-master\node_modules\ejs\lib\ejs.js:412:10)
    at View.render (E:\code\kk\SecretChat-master\node_modules\express\lib\view.js:128:8)
    at tryRender (E:\code\kk\SecretChat-master\node_modules\express\lib\application.js:640:10)
    at EventEmitter.render (E:\code\kk\SecretChat-master\node_modules\express\lib\application.js:592:3)
    at ServerResponse.render (E:\code\kk\SecretChat-master\node_modules\express\lib\response.js:966:7)
    at E:\code\kk\SecretChat-master\routes\roomview.js:19:9
    at Layer.handle [as handle_request] (E:\code\kk\SecretChat-master\node_modules\express\lib\router\layer.js:95:5)
    at next (E:\code\kk\SecretChat-master\node_modules\express\lib\router\route.js:137:13)
    at Route.dispatch (E:\code\kk\SecretChat-master\node_modules\express\lib\router\route.js:112:3)
    at Layer.handle [as handle_request] (E:\code\kk\SecretChat-master\node_modules\express\lib\router\layer.js:95:5)
    at E:\code\kk\SecretChat-master\node_modules\express\lib\router\index.js:281:22
    at Function.process_params (E:\code\kk\SecretChat-master\node_modules\express\lib\router\index.js:335:12)
    at next (E:\code\kk\SecretChat-master\node_modules\express\lib\router\index.js:275:10)
    

roomview.html部分代码:

<h1>房间列表</h1>

<table>
    <thead>
    <tr>
        <th>id</th>
        <th>roomName</th>
        <th>roomContent</th>
        <th>roomCreateUser</th>
        <th>roomImg</th>
        <th>roomCreateDate</th>
        <th>roomJoinPeos</th>
        <th>roomChat</th>
    </tr>
    </thead>
    <tbody>
    <% rooms.forEach(function( room ){ %>
    <tr>
        <td><%= room._id%></td>
        <td><%= room.roomName %></td>
        <td><%= room.roomContent %></td>
        <td><%= room.roomCreateUser %></td>
        <td><%= room.roomImg %></td>
        <td><%= room.roomCreateDate %></td>
        <td><%= room.roomJoinPeos %></td>
        <td><%= room.roomImg %></td>
        <td><a href="del.html?id=<%=room._id%>">删除房间</a> | <a href="modifyroom.html?id=<%=demo._id%>">更新房间信息</a></td>
    </tr>
    <% }); %>
    </tbody>

路由roomview.js代码:

var fs = require('fs');
var formidable = require('formidable');
var util = require('util');
var express = require('express');
var multer = require('multer');
var roommodal = require('../src/db/models/room');
var user=require('../src/db/models/user');
var adminuser=require('../src/db/models/adminuser');
var upload = multer({ dest: 'uploads/' });
var result = require('../src/utils/result');
var router = express.Router();
router.get('/roomview',function(req,res,next){
    if(req.session.userid){
        return next();
    }
    res.redirect('/adminlogin');
});
router.get('/',function(req,res,next){
    res.render('roomview.html',{userid:req.session.userid});
});

var Room=roommodal.Room;
exports.roomview = function(req, res,next){

    Room.find(function(err,docs){
        res.render('roomview', {
            rooms:docs
        });
    });

};

module.exports = router;

模型room.js部分代码:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var roomSchema = new Schema({
  roomName:String,
  roomContent:String,
  roomCreateDate:Date,
  roomImg:String,
  roomCreateUser:String,
  roomJoinPeos:Number,
  roomChat:String
});

var room = mongoose.model('Room',roomSchema);
module.exports = room;

server.js部分代码:

var express = require('express');
var path = require('path');
var bodyParser = require('body-parser');
var session = require('express-session');

var loginRouter = require('./routes/login');
var logoutRouter = require('./routes/logout');
var indexRouter = require('./routes/index');
var roomviewRouter = require('./routes/roomview');
var registerRouter = require('./routes/register');
var adminloginRouter = require('./routes/adminlogin');
var adminregisterRouter = require('./routes/adminregister');

var app = express();
app.set('PORT',3000);
var server = app.listen(app.get('PORT'),function(err){
  if(err){
    console.error('server error:%s',err && ess.message);
    return;
  }
  console.log('server listening at :::',app.get('PORT'));
});

app.use(session({
  secret:'recommand 128 bytes random string',
  cookie:{maxAge:60*1000*1000}
}));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extened:true}));

app.use('/public',express.static(path.join(__dirname,'/public')));
app.use('/uploads',express.static(path.join(__dirname,'/uploads')));

var ejs = require('ejs');
app.engine('html',ejs.__express);
app.set('view engine', 'html');

app.use('/login',loginRouter);
app.use('/adminlogin',adminloginRouter);
app.use('/',indexRouter);
app.use('/roomview',roomviewRouter);
app.use('/register',registerRouter);
app.use('/adminregister',adminregisterRouter);
app.get('/room/users/:roomId',function(req,res,next){
  res.json(rooms[req.params.roomId]);
});
app.get('/adminlogout',function(req,res,next){
    if(req.session.userid){
        var user = req.session.userid;
        delete req.session.userid;
    }
    res.redirect('/adminlogin');
});

我猜测是在roomview.js这个路由出了问题而不是server.js,然后模型room.js是不能改的,所以应该只能改roomview.js,请问各位大神,怎么改呢?

阿神阿神2863 days ago1079

reply all(2)I'll reply

  • PHP中文网

    PHP中文网2017-04-17 16:31:57

    Question

    1. Part of the code in server.js has too many app.use()s installed and is not used at all.

    2. The routing roomview.js code is not grammatical. Where did you learn exports.roomview? Can it also be used with module.exports? Rewrite exports.roomview into router.get() mode. The following code is not grammatical.

      exports.roomview = function(req, res,next){
          Room.find(function(err,docs){
              res.render('roomview', {
                  rooms:docs
              });
          });
      };
    3. You give the page error message and the link to the page you opened. How else do I know there is an error opening /roomview? Or is there an error when opening /roomview/123 or /roomview/roomview?

    Solution

    According to the error message, you want to open the /roomview page, but the exports.roomview of your route roomview.js has not been reached at all. The method used is route.get('/', callback) of roomview.js. This callback does not set rooms, so an error is reported. Import exports.roomview into the callback. It's roughly as follows.

    router.get('/', function(req,res,next){
        Room.find(function(err,docs){
            res.render('roomview', {
                userid: req.session.userid,
                rooms:docs
            });
        });
    });
    

    soonfy

    reply
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 16:31:57

    In the console, type out the rooms data you rendered to the page and see if there is any. I feel like you wrote it wrong. You exposed room in room.js; then how do you write var Room=roommodal.Room in the routing method of roomview.js; just use roommodal.find. What is the Room behind it! ! !

    reply
    0
  • Cancelreply