nodejs开发博客记录Word格式.docx

上传人:b****5 文档编号:16896108 上传时间:2022-11-26 格式:DOCX 页数:27 大小:151.05KB
下载 相关 举报
nodejs开发博客记录Word格式.docx_第1页
第1页 / 共27页
nodejs开发博客记录Word格式.docx_第2页
第2页 / 共27页
nodejs开发博客记录Word格式.docx_第3页
第3页 / 共27页
nodejs开发博客记录Word格式.docx_第4页
第4页 / 共27页
nodejs开发博客记录Word格式.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

nodejs开发博客记录Word格式.docx

《nodejs开发博客记录Word格式.docx》由会员分享,可在线阅读,更多相关《nodejs开发博客记录Word格式.docx(27页珍藏版)》请在冰豆网上搜索。

nodejs开发博客记录Word格式.docx

module.exports=function(app){

app.get('

function(req,res){});

}

博客系统中的index.js的雏形:

function(req,res){

主页'

/reg'

reg'

注册'

app.post('

/login'

login'

登录'

/logout'

/post'

post'

发表'

你会发现reg、login和post都有get和post方法,我们可以这么理解:

get方法是实现当用户试图访问这个网页时要显示些什么,post方法是当从这个网页上发出数据(这里时提交表单)时要干些什么,所以访问/和/logout就不需要post方法了。

render函数的意思是,当你要访问比如主页时,服务器找到index.ejs文件并替换变量title的值为字符串’主页’

路由控制的雏形出来了,下面写视图部分,在views下面新建几个文件,index.ejs、login.ejs、reg.ejs、post.ejs,然后再给每个页面添加统一的头部导航(header.ejs)和底部说明(footer.ejs),使用的时候把<

%-includeheader%>

和<

%-includefooter%>

分别放在头尾就行了。

header.ejs

<

!

DOCTYPEhtml>

html>

head>

metahttp-equiv="

Content-Type"

content="

text/html;

charset=UTF-8"

>

title>

Blog<

/title>

linkrel="

stylesheet"

href="

stylesheets/style.css"

/head>

body>

header>

h1>

%=title%>

/h1>

/header>

nav>

span>

atitle="

主页"

/"

主页<

/a>

/span>

登录"

/login"

登录<

注册"

/reg"

注册<

/nav>

article>

footer.ejs

/article>

/body>

/html>

index.ejs

%-includeheader%>

这是主页

%-includefooter%>

login.ejs

formmethod="

post"

name="

form"

id="

<

table>

tbody>

tr>

td>

labelfor="

username"

用户名:

/label>

/td>

inputtype="

text"

placeholder="

请输入用户名"

/>

/tr>

password"

密码:

请输入密码"

tdcolspan="

2"

class="

btn"

>

submit"

value="

/tbody>

/table>

/form>

reg.ejs

comfirm_pwd"

再次输入密码:

请再次输入密码"

然后再修改下style.css:

nava:

hover{

background:

#2ECC71;

tr:

last-child{

text-align:

center;

td{

height:

24px;

padding:

5px;

td:

first-child{

right;

left;

tdinput[type="

],tdinput[type="

]{

display:

block;

border:

1pxsolidgray;

border-radius:

3px;

td.btn{

td.btninput{

010px;

font-size:

16px;

font-weight:

bold;

margin-top:

预览下页面:

现在只是实现了视图,逻辑操作还没写,那涉及到数据库了,下一节吧。

nodejs-express开发个人博客

(二)

207次

3

nodejs--express开发个人博客

(2)

上一部分已经实现了视图的雏形,现在加上逻辑操作。

登陆、注册、文章发表都需要用到数据库的数据存取,用的比较多的就是mongodb了。

MongoDB是一个对象数据库,它没有表、行等概念,也没有固定的模式和结构,所有的数据以文档的形式存储。

所谓文档就是一个关联数组式的对象,它的内部由属性组成,一个属性对应的值可能是一个数、字符串、日期、数组,甚至是一个嵌套的文档。

下面是一个 

MongoDB文档的示例:

{"

_id"

:

ObjectId("

4f7fe8432b4a1077a7c551e8"

), 

"

uid"

2004, 

byvoid"

 

net9"

{"

nickname"

BYVoid"

surname"

Kuo"

givenname"

Carbo"

fullname"

CarboKuo"

emails"

["

byvoid@"

"

byvoid.kcp@"

], 

website"

"

address"

Zijing2#,TsinghuaUniversity"

看着眼熟吧?

恩,和json的格式一样。

使用方法:

mongod--dbpathC:

\ProgramFiles\nodejs\mongodb\data--logpath=C:

\ProgramFiles\nodejs\mongodb\logs\mongodb.log--install

去官网下载mongodb,解压到D:

\softdata\nodejs\mongodb,在mongodb文件夹下新建文件夹取名myblog用来存放我们的数据。

然后新打开一个cmd窗口,cd到我们的D:

\softdata\nodejs\mongodb\bin目录下,输入mongod-dbpath"

D:

\softdata\nodejs\mongodb\blog"

设置数据库路径并启动数据库,最小化窗口不要关闭(以后启动也这么启动,另外可以进到bin目录下通过startmongo命令来启动mongodb的控制台,方便查看自己的数据库中的内容,一些常见的命令有:

db.users.find()、db.users.count()、db.users.remove()等,具体是干什么的,自己试过就知道了)。

接下来我们在node中连接mongodb,打开package.json,在dependencies属性中添加一行代码:

mongodb"

:

*"

,然后npminstall安装mongodb模块,接下来在blog文件夹下创建settings.js文件,用于保存数据库的连接信息:

module.exports={

cookieSecret:

myblog'

db:

blog'

host:

localhost'

好了,数据库准备好了,下面就来写数据库存放的数据模型了。

在blog下面新建一个文件夹models用于存放数据模型。

在models下面新建db.js用于配置数据库:

varsettings=require('

../settings'

),

Db=require('

mongodb'

).Db,

Connection=require('

).Connection,

Server=require('

).Server;

module.exports=newDb(settings.db,newServer(settings.host,Connection.DEFAULT_PORT,{}));

接下来安装connect-mongo模块用来存储会话信息到数据库,关于connect-mongo的说明在nodejs开发指南里面做了详细解释,不多说。

在package.json的dependencies中添加一行代码:

connect-mongo"

,npminstall安装connect-mongo模块。

然后在app.js里面引入数据库的相关配置文件就行了,先在“varpath=require('

path'

);

”后添加以下内容:

varMongoStore=require('

connect-mongo'

)(express);

//注意:

后面有(express)

./settings'

在“app.use(express.methodOverride());

”后添加:

app.use(express.cookieParser());

app.use(express.session({

secret:

settings.cookieSecret,

store:

newMongoStore({

settings.db

})

}));

至此数据库的配置已经做好了,下面可以用了。

登录和注册都需要比对数据库中的用户信息。

在models下新建一个user.js,里面封装了对用户的操作:

varmongodb=require('

./db'

functionUser(user){

this.name=user.name;

this.password=user.password;

module.exports=User;

User.prototype.save=functionsave(callback){

varuser={

name:

this.name,

password:

this.password,

};

mongodb.open(function(err,db){

if(err){

returncallback(err);

}

db.collection('

users'

function(err,collection){

mongodb.close();

}

collection.ensureIndex('

name'

{

unique:

true

collection.insert(user,{safe:

true},function(err,user){

callback(err,user);

});

User.get=functionget(username,callback){

collection.findOne({

username

},function(err,doc){

if(doc){

varuser=newUser(doc);

}else{

callback(err,null);

然后在index.js里面修改登录的处理过程,即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('

varmd5=crypto.createHash('

md5'

password=md5.update(req.body.password).digest('

base64'

User.get(req.body.username,function(err,user){

if(!

user){

req.flash('

'

用户不存在'

returnres.redirect('

if(user.password!

=password){

密码错误'

req.session.user=user;

'

登陆成功'

res.redirect('

注意到req.flash了?

恩,这个是用于显示错误信息的,需要用到flash模块,在命令行中输入npminstall 

connect-flash来安装flash,然后在app.js中varsettings后面加上

varflash=require('

connect-flash'

在“app.set('

viewengine'

ejs'

app.use(flash());

这样就可以使用flash的通知功能了。

还注意到什么没?

crypto!

crypto是Node.js的一个核心模块,功能是加密并生成各种散列,使用它之前首先要声明varcrypto=require('

crypto'

)。

代码中使用它计算了密码的散列值。

到这里,应该登录就写完了,试试?

点击登录按钮没有任何提示?

因为还没有加·

·

为了显示信息,还需要引入视图助手,《node.js开发指南》中这样描述:

“为了实现不同登录状态下页面呈现不同内容的功能,我们需要创建动态视图助手,通过它我们才能在视图中访问会话中的用户数据。

同时为了显示错误和成功的信息,也要在动态视图助手中增加响应的函数。

打开app.js,在http.createServer()前添加以下代码:

app.use(function(req,res,next){varerr=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的最后添加以下代码:

%if(locals.success){%>

div>

%=locals.success%>

/div>

%}%>

%if(locals.error){%>

div>

%=locals.error%>

好了,再试试登录?

因为这个时候的数据库是空的,所以用户名不存在。

那接下来就通过注册添加新用户吧?

毕竟mongodb的用法还不是很熟悉。

修改index.js中的reg的get和post处理:

function(req,res){

if(req.body['

password-repeat'

]!

=req.body['

password'

]){

两次输入的口令不一致'

varpassword=md5.update(req.body.password).digest('

varnewUser=newUser({

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1