찾다

 >  Q&A  >  본문

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,请问各位大神,怎么改呢?

阿神阿神2866일 전1084

모든 응답(2)나는 대답할 것이다

  • PHP中文网

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

    질문

    1. server.js의 일부 코드에 app.use()가 너무 많아 전혀 사용되지 않습니다.

    2. 라우팅 roomview.js 코드가 문법적이지 않습니다. imports.roomview를 어디서 배우셨나요? module.exports에도 사용할 수 있나요? imports.roomview를 router.get() 모드로 다시 작성하세요. 다음 코드는 문법적이지 않습니다.

      으아아아
    3. 페이지 오류 메시지와 열었던 페이지의 링크를 제공합니다. /roomview를 여는 중 오류가 발생했는지 어떻게 알 수 있나요? 아니면 /roomview/123 또는 /roomview/roomview를 열 때 오류가 발생합니까?

    솔루션

    오류 메시지에 따르면 /roomview 페이지를 열려고 하는데 roomview.js 경로의 imports.roomview에 전혀 접근하지 못했습니다. 사용된 메소드는 roomview.js의 Route.get('/', callback)입니다. 이 콜백은 룸을 설정하지 않으므로 imports.roomview를 콜백으로 보고합니다. 대략 다음과 같습니다.

    으아아아

    회신하다
    0
  • 伊谢尔伦

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

    콘솔에서 페이지에 렌더링한 객실 데이터를 입력하고 잘못 작성한 것 같습니다. room.js에 공간을 노출시켰습니다. 그러면 roomview.js의 라우팅 메소드에 var Room=roommodal.Room을 어떻게 작성합니까? 그 뒤에 있는 Room은 무엇입니까? ! !

    회신하다
    0
  • 취소회신하다