在数据库设计完成以后,就能够开始项目开发了,实实在在的编写代码了。node
这里使用的是express
Web框架,因而大大简化了HTTP方法以及路由访问的实现过程。安装完express
模块后,建议同时装上express-generator
项目生成器,快捷生成express项目初始目录及必要文件。mysql
npm install --save express npm install express-generator -g
注意:express-generator
模块须要全局安装。git
安装完express-generator
生成器后,在项目目录下,运行express -e
命令,便可生成express项目目录。github
例如:express -e ./test01
命令就是在当前目录下建立一个以ejs
模版引擎的名叫test01的项目目录。sql
建立完以后,进入项目目录并安装依赖包,执行以下命令:数据库
cd ./test01 && npm install
安装完以后,执行命令npm start
,一个Node Web项目就启动了,打开浏览器输入http://localhost:3000
就能够看到express为你准备的首页了。express
因为这里使用的是MySQL
数据库,Node项目中须要安装MySQL
模块以便使用MySQL数据库。使用npm
包管理器很容易就能安装完成。npm
npm install mysql --save
开始一个项目,最好是先把数据库相关功能完成,因为项目简单,仅仅是表message
以及vote
两个表的操做,因而数据库的链接我所有写在了一个文件上了 - db.js
(新建db文件夹,在其中新建db.js
),查看MySQL
模块的README
文档,大概知道了该模块的使用方法。浏览器
PS. 在安装了新的模块而不会用的状况下,最好是把模块里的
README
文档浏览一遍,虽然大部分是英文的,可是好过各类百度。
-- 过来人忠告bash
看完文档,使用了最简单的链接方式,在db.js
中开始编写代码:
var mysql = require('mysql'); var options = { host: 'localhost', user: 'lupeng', password: '080910', database: 'vote' } // 获取数据库对象 function getConn (){ var client = mysql.createConnection(options); return client; } // 获得管理员账户 exports.getAdmin = function(callback){ var client = getConn(); var statement = 'select username,password from user where Id = 1'; client.query(statement, function(errs,rows,fields){ callback(errs,rows); }); client.end(); }
这里只是贴上了获取管理员帐户的方法示例,其余获取数据库的方法能够都写在这个db.js
的文件里,这里就很少赘述,后面会附上项目代码自行查看。
express提供了很是简单的路由编写方式,这里分别使用了HTTP协议GET/
、/show
、/login
、/admin
、/add
以及/edit
来分别得到首页、查看页、登录页、后台首页、添加页以及编辑页。而后使用POST/
来实现投票;使用/del
来实现删除;使用/edit
来提交更新;使用/add
来实现添加主题等。
这里的代码我自认为写的很是的乱,须要好好设计以及从新编写,这里就不贴出来。
在路由方法里有个简易的过滤器须要实现,也就是在用户登录后台的时候,须要session
的一个保存以及获取,来证实你是管理员。这里我一样采起了一个简单的express中间件来实现了,也就是在访问/admin
的时候,须要验证seesion
,见下面简要代码:
/* 登录权限 */ router.use(function (req, res, next) { db.getAdmin(function (errs, rows) { if (errs) { res.render('error', { message: errs, error: {} }); } else { var username = rows[0].username; var password = rows[0].password; if (req.session && req.session.username == username && req.session.password == password) { next(); } else { res.render('login', { title: '后台登录', info: '请登录' }); } } }); });
这个中间件放在访问/admin
的路由上,凡是对/admin
的全部访问请求都须要通过该中间件来验证是否存在session
,这样就大概实现了管理员验证的一个功能。固然,这里还须要使用到express-session
的模块,安装并在app.js
中简单配置便可。如下是这里的简要配置:
// session config app.set('trust proxy', 1); app.use(session({ secret: 'keyboard cat', resave: false, saveUninitialized: true, cookie: { maxAge: 1000*60*60*1 } }));
因为没有作登出功能,session
设置了失效时间为1个小时。
大概的项目实现过程就写到这里,详细能够看下该项目源代码 - vote-node - Coding.net or vote-node - Github.com。
因为初次尝试使用Node写一个Web项目,写的很差的地方请见谅,后续有可能对该项目进行进一步完善。