1、module.exports = function(app) app.get(,function(req,res);博客系统中的index.js的雏形:,function(req,res)主页/regreg注册 app.post(/loginlogin登录/logout/postpost发表 你会发现reg、login和post都有get和post方法,我们可以这么理解:get方法是实现当用户试图访问这个网页时要显示些什么,post方 法是当从这个网页上发出数据(这里时提交表单)时要干些什么,所以访问/和/logout就不需要post方法了。render函数的意思是,当你要访问 比如主页时,服
2、务器找到index.ejs文件并替换变量title的值为字符串主页路由控制的雏形出来了,下面写视图部分,在views下面新建几个文件,index.ejs、login.ejs、reg.ejs、post.ejs,然后再给每个页面添加统一的头部导航(header.ejs)和底部说明(footer.ejs),使用的时候把和分别放在头尾就行了。header.ejshtmlheadmeta http-equiv=Content-Type content=text/html; charset=UTF-8titleBloglink rel=stylesheet href=stylesheets/style.c
3、ss/headbodyheaderh1%= title %/h1/headernavspana title=主页/主页/span登录/login登录注册/reg注册articlefooter.ejs/article/body/htmlindex.ejs%- include header %这是主页%- include footer %login.ejsform method=post name=form id= tbodytrtdlabel for=username用户名:/label/tdinput type=text placeholder=请输入用户名/trpassword密码:请输入密
4、码td colspan=2 class=btn submit value=/tbody/table/formreg.ejscomfirm_pwd再次输入密码:请再次输入密码然后再修改下style.css:nav a:hover background: #2ECC71;tr:last-child text-align: center;td height: 24px; padding: 5px;td:first-child right; left;td inputtype=,td inputtype= display: block; border: 1px solid gray; border-r
5、adius: 3px;td.btntd.btn input0 10px; font-size: 16px; font-weight: bold; margin-top:预览下页面:现在只是实现了视图,逻辑操作还没写,那涉及到数据库了,下一节吧。nodejs-express开发个人博客(二)207次3nodejs-express开发个人博客(2) 上一部分已经实现了视图的雏形,现在加上逻辑操作。登陆、注册、文章发表都需要用到数据库的数据存取,用的比较多的就是mongodb了。MongoDB 是一个对象数据库,它没有表、行等概念,也没有固定的模式和结构,所有的数据以文档的形式存储。所谓文档就是一个
6、关联数组式的对象,它的内部由属性组成,一个属性对应的值可能是一个数、字符串、日期、数组,甚至是一个嵌套的文档。下面是一个MongoDB 文档的示例: _id : ObjectId( 4f7fe8432b4a1077a7c551e8 ), uid 2004,byvoid,net9 nicknameBYVoidsurnameKuogivennameCarbofullnameCarbo Kuoemails byvoid, byvoid.kcp ,websiteaddressZijing 2#, Tsinghua University 看着眼熟吧?恩,和json的格式一样。 使用方法:mongod -
7、dbpath C:Program Filesnodejsmongodbdata -logpath=C:Program Filesnodejsmongodblogsmongodb.log -install 去官网下载mongodb,解压到D:softdatanodejsmongodb,在mongodb文件夹下新建文件夹取名myblog用来存放我们的数据。然后新打开一个cmd窗口,cd到我 们的D:softdatanodejsmongodbbin目录下,输入mongod -dbpath D:softdatanodejsmongodbblog设置数据库路径并启动数据库,最小化窗口不要关闭(以后启动也
8、这么启动,另外可以进到bin目录下通过start mongo命令来启动mongodb的控制台,方便查看自己的数据库中的内容,一些常见的命令有:db.users.find()、db.users.count()、db.users.remove()等,具体是干什么的,自己试过就知道了)。接下来我们在node中连接mongodb,打开 package.json,在 dependencies 属性中添加一行代码:mongodb:*,然后npm install安装mongodb模块,接下来在blog文件夹下创建 settings.js 文件,用于保存数据库的连接信息:module.exports = co
9、okieSecret:myblog, db:blog host:localhost 好了,数据库准备好了,下面就来写数据库存放的数据模型了。 在blog下面新建一个文件夹models用于存放数据模型。在models下面新建db.js用于配置数据库:var settings = require(./settings), Db = require(mongodb).Db, Connection = require().Connection, Server = require().Server;module.exports = new Db(settings.db, new Server(setti
10、ngs.host, Connection.DEFAULT_PORT, );接下来安装connect-mongo模块用来存储会话信息到数据库,关于connect-mongo的说明在nodejs开发指南里面做了详细解释,不多说。在 package.json 的dependencies中添加一行代码:connect-mongo,npm install安装connect-mongo模块。然后在app.js里面引入数据库的相关配置文件就行了,先在“var path = require(path);”后添加以下内容:var MongoStore = require(connect-mongo)(expre
11、ss);/注意:后面有(express)./settings在“app.use(express.methodOverride();”后添加:app.use(express.cookieParser();app.use(express.session( secret: settings.cookieSecret, store: new MongoStore( settings.db ) );至此数据库的配置已经做好了,下面可以用了。登录和注册都需要比对数据库中的用户信息。在models下新建一个user.js,里面封装了对用户的操作:var mongodb = require(./dbfunct
12、ion User(user) this.name = user.name; this.password = user.password;module.exports = User;User.prototype.save = function save(callback) var user = name: this.name, password: this.password, ;mongodb.open(function(err, db) if(err) return callback(err); db.collection(users, function(err, collection) mo
13、ngodb.close(); collection.ensureIndex(name, unique:true collection.insert(user,safe: true, function(err, user) callback(err, user););User.get = function get(username, callback) collection.findOne( username ,function(err, doc) if(doc) var user = new User(doc); else callback(err, null);然后在index.js里面修改
14、登录的处理过程,即app.get()和app.post(),修改如下,同时为了使用User,需要在index.js开始的地方引入user.js, function(req, res) res.render( title:, user:req.session.user, success:req.flash(success).toString(), error:error).toString()app.post( var md5 = crypto.createHash(md5 password = md5.update(req.body.password).digest(base64 User.g
15、et(req.body.username, function(err, user) if(!user) req.flash(, 用户不存在 return res.redirect( if(user.password != password)密码错误 req.session.user = user;,登陆成功 res.redirect(注意到req.flash了?恩,这个是用于显示错误信息的,需要用到flash模块,在命令行中输入npm installconnect-flash来安装flash,然后在app.js中var settings后面加上var flash = require(conne
16、ct-flash在“app.set(view engineejsapp.use(flash();这样就可以使用flash的通知功能了。还注意到什么没?crypto!crypto 是 Node.js 的一个核心模块,功能是加密并生成各种散列,使用它之前首先要声明 var crypto = require(crypto)。代码中使用它计算了密码的散列值。到这里,应该登录就写完了,试试?点击登录按钮没有任何提示?因为还没有加为了显示信息,还需要引入视图助手,node.js开发指南中这样描述:“为了实现不同登录状态下页面呈现不同内容的功能,我们需要创建动态视图助手,通过它我们才能在视图中访问会话中的用
17、户数据。同时为了显示错误和成功的信息,也要在动态视图助手中增加响应的函数。 ”打开 app.js,在http.createServer()前添加以下代码:app.use(function(req,res,next)var err = req.flash( success = req.flash(res.locals.user = req.session.user;res.locals.error = err.length ? err : null;res.locals.success = success.length ? success :next();在header.ejs的最后添加以下代码
18、:% if (locals.success) %div %= locals.success %/div% % if (locals.error) %div%= locals.error %好了,再试试登录?因为这个时候的数据库是空的,所以用户名不存在。那接下来就通过注册添加新用户吧?毕竟mongodb的用法还不是很熟悉。修改index.js中的reg的get和post处理:, function(req,res) if(req.bodypassword-repeat != req.bodypassword)两次输入的口令不一致 var password = md5.update(req.body.password).digest( var newUser = new User( req.body.username, password, User.get(newUser.name, function(err, user) if(user) err = 用户已存在;, err); newUser.save(function(err),err); req.session.user = newUser; r
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1