javascript - nodejs在一個頁面下顯示mongodb數據庫里的內容,頁面出現is not defined錯誤,是哪里出了問題?
問題描述
想在一個頁面顯示房間信息,于是照著一個curd的demo來寫自己的項目,但是打開后出現如下錯誤:
ReferenceError: E:codekkSecretChat-masterviewsroomview.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:codekkSecretChat-masternode_modulesejslibejs.js:524:12), <anonymous>:14:8) at returnedFn (E:codekkSecretChat-masternode_modulesejslibejs.js:555:17) at tryHandleCache (E:codekkSecretChat-masternode_modulesejslibejs.js:203:34) at View.exports.renderFile [as engine] (E:codekkSecretChat-masternode_modulesejslibejs.js:412:10) at View.render (E:codekkSecretChat-masternode_modulesexpresslibview.js:128:8) at tryRender (E:codekkSecretChat-masternode_modulesexpresslibapplication.js:640:10) at EventEmitter.render (E:codekkSecretChat-masternode_modulesexpresslibapplication.js:592:3) at ServerResponse.render (E:codekkSecretChat-masternode_modulesexpresslibresponse.js:966:7) at E:codekkSecretChat-masterroutesroomview.js:19:9 at Layer.handle [as handle_request] (E:codekkSecretChat-masternode_modulesexpresslibrouterlayer.js:95:5) at next (E:codekkSecretChat-masternode_modulesexpresslibrouterroute.js:137:13) at Route.dispatch (E:codekkSecretChat-masternode_modulesexpresslibrouterroute.js:112:3) at Layer.handle [as handle_request] (E:codekkSecretChat-masternode_modulesexpresslibrouterlayer.js:95:5) at E:codekkSecretChat-masternode_modulesexpresslibrouterindex.js:281:22 at Function.process_params (E:codekkSecretChat-masternode_modulesexpresslibrouterindex.js:335:12) at next (E:codekkSecretChat-masternode_modulesexpresslibrouterindex.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='http://www.cgvv.com.cn/wenda/del.html?id=<%=room._id%>'>刪除房間</a> | <a href='http://www.cgvv.com.cn/wenda/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,請問各位大神,怎么改呢?
問題解答
回答1:問題server.js部分代碼掛載太多app.use(),根本用不著。
路由roomview.js代碼都不符合語法。 exports.roomview 是從哪里學到的?還能搭配 module.exports 使用?把 exports.roomview 改寫成 router.get()模式。以下代碼不符合語法。
exports.roomview = function(req, res,next){ Room.find(function(err,docs){res.render(’roomview’, { rooms:docs}); });};
你給出頁面錯誤信息,也給出你打開的頁面鏈接呀。要不我怎么知道是打開/roomview出錯?還是打開/roomview/123還是打開/roomview/roomview出錯?
解決根據錯誤信息,你是想打開/roomview頁面,你的 路由 roomview.js 的 exports.roomview 根本就沒有走到。走的是路由 roomview.js 的 route.get(’/’, callback),這個 callback 沒有設置 rooms, 所以報錯,把 exports.roomview 引入 callback。大致如下。
router.get(’/’, function(req,res,next){ Room.find(function(err,docs){res.render(’roomview’, { userid: req.session.userid, rooms:docs}); });});
soonfy
回答2:你在控制臺 把你render 到頁面的 rooms 數據打出來,看有木有,我怎么感覺 你寫錯了。 你在room.js里面 暴露出去了 room;然后 你在roomview.js路由方法怎么寫var Room=roommodal.Room; 直接 roommodal.find 就好了,后面的 Room 是啥!!!
