Info

公司马上要举行 hack day 了,这次决定和小伙伴用 Express 作为框架来搭建我们的应用,所以昨天搭出来UI后,今天开始系统的学习下 Express。

Start

首先是express的全局设置。

1
sudo npm install -g express

接着我们试着用express搭建一个简单的blog程序
在work path 运行命令

1
express -e ejs blog

可以看到express已经帮你创建了一系列的模板程序。接着进入blog目录安装ejs等相关依赖。

1
cd blog && npm install

运行

1
node app

并访问http://localhost:3000/ ,简单的hello world 程序已经生成。

下面来看下程序的整个结构,运行command

1
tree -I  node*

express的模板程序结构看起来和rails的结构很相像。

1
2
3
4
5
6
7
8
9
10
11
12
├── app.js
├── package.json
├── public
│   ├── images
│   ├── javascripts
│   └── stylesheets
│   └── style.css
├── routes
│   ├── index.js
│   └── user.js
└── views
└── index.ejs

Blog Design

对express的模板程序有了基本概念后,我们开始来实现一个稍微复杂的blog。
blog 需要实现下面的功能。

1
2
3
4
5
/:首页
/login:登录
/reg:注册
/post:发表文章
/logout:登出

blog 的数据存储采用mongodb。

Improve

首先我门先简单的改进下我们当前的blog程序。

首先是重写默认的路由

在 app.js 里面我们可以看到以下两行语句。

1
2
app.get('/', routes.index);
app.get('/users', user.list);

我们把这部分代码移到 routes/index.js 使代码结构看起来更为清晰。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
module.exports = function(app){
app.get('/',function(req,res){
res.render('index', { title: '主页' });
});
app.get('/reg',function(req,res){
res.render('reg', { title: '注册' });
});
app.post('/reg',function(req,res){
});
app.get('/login',function(req,res){
res.render('login', { title: '登录' });
});
app.post('/login',function(req,res){
});
app.get('/logout',function(req,res){
});
app.get('/post',function(req,res){
res.render('post', { title: '发表' });
});
app.post('/post',function(req,res){
});
};

同时在 app.js里将上面两行代码替换成。

1
routes(app);

Ok,接下来我们添加相应的ejs,实现后的前端界面结构应该如图所示。

1
2
3
4
5
6
└── views
├── footer.ejs
├── header.ejs
├── index.ejs
├── login.ejs
└── reg.ejs

footer.ejs

1
2
3
</article>
</body>
</html>

header.ejs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Blog</title>
<link rel="stylesheet" href="stylesheets/style.css">
</head>
<body> <header>
<h1><%= title %></h1>
</header> <nav>
<span><a title="主页" href="/">home</a></span>
<span><a title="登录" href="/login">login</a></span>
<span><a title="注册" href="/reg">register</a></span>
</nav>
<article>

index.ejs

1
2
3
<%- include header %>
这是主页
<%- include footer %>

login.ejs

1
2
3
4
5
6
7
<%- include header %>
<form method="post">
用户名:<input type="text" name="username" /><br />
密码: <input type="password" name="password" /><br />
<input type="submit" value="登录" />
</form>
<%- include footer %>

reg.ejs

1
2
3
4
5
6
7
8
<%- include header %>
<form method="post">
用户名:<input type="text" name="username" /><br />
密码: <input type="password" name="password" /><br />
确认密码:<input type="password" name="password-repeat" /><br />
<input type="submit" value="注册" />
</form>
<%- include footer %>

上面所做的工作简单的概括来说就是把整个 blog 的 header 和 footer 分离开,并按此建立相应的登陆,注册页面。

可以通过访问http://localhost:3000/ 来查看当前主页。

mongo db

首先是安装。mac下安装mongodb很简单。

1
2
brew update
brew install mongodb

测试

1
2
3
mongo
> db.test.save({a:1})
> db.test.find()

mongo db装上后 开始安装node js的依赖。

在 package.json 中加入。

1
2
"mongodb":"*",
"connect-mongo":"*"

运行

1
npm install

安装完成后,我们就能够在程序中对mongo db进行操作了。

我们在blog下面新建 settings.js 用来存储我们blog程序的相关配置。

1
2
3
4
5
module.exports = {
cookieSecret: 'myblog',
db: 'blog',
host: 'localhost'
};

创建 models 目录并新建 js 文件 db.js 用来操作 db

1
2
3
4
5
var settings = require('../settings'),
Db = require('mongodb').Db,
Connection = require('mongodb').Connection,
Server = require('mongodb').Server;
module.exports = new Db(settings.db, new Server(settings.host, Connection.DEFAULT_PORT, {}));

而Package connect-mongo 是用来存储会话信息到数据库。

在 app.js 中添加。

1
2
var MongoStore = require('connect-mongo')(express);
var settings = require('./settings');

同时在 app.use(express.methodOverride()) 后面添加

1
2
3
4
5
6
7
app.use(express.cookieParser());
app.use(express.session({
secret: settings.cookieSecret,
store: new MongoStore({
db: settings.db
})
}));

其中 express.cookieParser() 是 Cookie 解析的中间件。express.session() 则提供会话支持,设置它的 store 参数为 MongoStore 实例,把会话信息存储到数据库中,以避免丢失。
在后面的小节中,我们可以通过 req.session 获取当前用户的会话对象,以维护用户相关的信息。”
至此,数据库的配置工作完成了,后面我们就可以用数据库了。

结论

Express的代码结构看起来还是蛮清晰的,npm上的第三方的资源也很丰富。

由于本人是Express的初学者,所以整个 blog 的过程也是完全参考 【一起学node.js (一)】用node+express搭建多人博客 这篇blog的内容,在此也感谢下原作者。

参考

【一起学node.js (一)】用node+express搭建多人博客

用Express搭建 blog (一)的更多相关文章

  1. 用express搭建一个简单的博客系统

    转自:https://blog.csdn.net/qq_29721837/article/details/62055603 Express 简介 Express 是一个简洁而灵活的 node.js W ...

  2. 建立一个node.js服务器(使用express搭建第一个Web环境)

    一.官网下载node.js 下载地址:https://nodejs.org/en/download/ 根据向导,下一步安装就可以了! 二.使用express搭建Web环境 express是一个开源的n ...

  3. express搭建简易web的服务器

    express搭建简易web的服务器 说到express我们就会想到nodejs,应为它是一款基于nodejs平台的web应用开发框架.既然它是基于nodejs平台的框架那么就得先安装nodejs. ...

  4. Hugo快速搭建Blog

    以往我们搭建blog要么学习一个编程语言+Web开发框架,要么使用现成的blog系统(如WordPress).其实我们还可以使用Hugo.Hugo是由Go语言实现的静态网站生成器,它不需要数据库,所以 ...

  5. 用Nodejs+Express搭建web,nodejs路由和Ajax传数据并返回状态,nodejs+mysql通过ajax获取数据并写入数据库

    小编自学Nodejs,看了好多文章发现都不全,而且好多都是一模一样的 当然了,这只是基础的demo,经供参考,但是相信也会有收获 今天的内容是用Nodejs+Express搭建基本的web,然后呢no ...

  6. 用 hugo 和 netlify 搭建blog【转】

    用 hugo 和 netlify 搭建blog - kok的笔记本 Releases · gohugoio/hugo · GitHub 测试baidu 测试163

  7. nodejs-使用multer实现多张图片上传,express搭建脚手架

    nodejs-使用multer实现多张图片上传,express搭建脚手架 在工作中,我们经常会看到用户有多张图片上传,并且预览展示的需求.那么在具体实现中又该怎么做呢? 本实例需要nodejs基础,本 ...

  8. express搭建服务器

    学习express搭建node服务器 一.安装express框架 1.了解框架(百度) 2.下载框架 (1)使用npm命令下载 npm install express -g //全局安装,安装的是ex ...

  9. 基于 Express 搭建一个node项目 - 起步

    一,如何基于 Express 搭建一个node项目 什么是Express 借用官方的介绍,Express是一个基于Node.js平台的极简.灵活的web应用开发框架,它提供了一系列强大的特性,帮助你创 ...

随机推荐

  1. 使用firefoxprofile,selenium设置firefox,初始化firefox

    1.什么是firefoxprofile 简单的来说就是个人定制,比如你设置自己访问主页,禁用加载图片这些个性化的设置,都可以保存到一个文件夹下,就是firefoxprofile,下次使用时候,加载该f ...

  2. 定义#define

                                                    定义符号常量   当我们不止一次用到某个符号常量时,常选择对符号变量进行定义,这样就能当成一般常量来用. ...

  3. 翻译题(map使用)

    What Are You Talking About 点我 Problem Description Ignatius is so lucky that he met a Martian yesterd ...

  4. 1207: C.LU的困惑

    题目描述 Master LU 非常喜欢数学,现在有个问题:在二维空间上一共有n个点,LU每连接两个点,就会确定一条直线,对应有一个斜率.现在LU把平面内所有点中任意两点连线,得到的斜率放入一个集合中( ...

  5. jquery跨域访问解决方案(转)

    客户端“跨域访问”一直是一个头疼的问题,好在有jQuery帮忙,从jQuery-1.2以后跨域问题便迎刃而解.由于自己在项目中遇到跨域问题,借此机会对跨域问题来刨根问底,查阅了相关资料和自己的实践,算 ...

  6. Jquery基础之ajax

    ajax是Asynchronous JavaScript and XML(异步JavaScript和XML)的简称,ajax并不是单一的技术而是利用一系列交互网页应用相关的技术形成的结合体,ajax揭 ...

  7. Amzon MWS API开发之 请求报告

    时间一晃而过又过了两周,博客园更新的速度确实有点慢,今天我要分享的是对请求报告的调用. 在文档中,相信大家也看了下面这个流程图吧? 相关流程,在文档中也有细说,我就不一一去Copy了:http://d ...

  8. Eclipse中更改默认java代码格式【转】

    在写代码时常常有2种代码样式习惯,如下图.由于一直习惯了第一种代码格式,而看第二种代码格式时感觉代码很乱,总找不到“{ }”对称的感觉.Eclipse自动格式化代码的快捷方式是Ctrl+Shift+F ...

  9. animate CSS动画程序接口(仅Chrome可用)

    jQuery中很早就提供了animate方法,使用它可以很方便地实现一些简单动画效果.后来CSS3中也提供了animation用于动画效果制作,但CSS本身的可操作性太差,所以用起来并不方便.现在最新 ...

  10. C#整理1——进制转换

    进制转换:二进制,八进制,十进制,十六进制. (一)二进制转十进制: 1.写2 2.标指数,从右向左,从0开始依次标记 3.乘系数,一一对应. 4.相加. 例:二进制数1101转十进制数* 1.2   ...