说明
为了教女友node中数据库的使用,花了几个小时看了一下sequelize这个orm框架,然后写了一个简单的留言板,可以实现发表留言,删除留言,修改留言.
(注:我本身不是学js的,node也就断断续续学了几天,半吊子,有不对的或者写的不好的地方希望指出.)
NodeJs版本:0.12.4(有点老了。。。)
系统:Ubuntu 14.04(系统貌似都差不多)
开始
安装
生成express项目,用ejs模板渲染
express -e message_board
cd message_board
npm install
安装sequelize以及mysql驱动
npm install --save sequelize
npm install --save mysql
用phpmyadmin创建一个数据库
代码编写
首先看看项目结构:
这里创建一个model文件夹,message.js用来连接数据库,并定义message模型,也就是留言板里的每一条留言。
routes文件夹中,index.js用来处理添加留言、删除留言。edit.js用来处理编辑留言。
views文件夹中有一个404.js,当缺少参数时,会跳转到这个页面中,显示“404, Not Found。”
代码:
message.js:
var Sequelize = require('sequelize');
var sequelize = new Sequelize(
'message_board', //数据库名
'root', //用户名
'root', //密码
{
'dialect': 'mysql',
'host': 'localhost',
'port': 3306
}
);
//定义表的模型
var Message = sequelize.define('message', {
id:{ //自增长id,主键,整形
type:Sequelize.INTEGER,
primaryKey: true,
autoIncrement:true
},
username: { //谁留的言
type: Sequelize.STRING(30)
},
content: { //留言的内容
type: Sequelize.TEXT
}
});
Message.sync(); //创建表
module.exports = Message;
index.js:
var express = require('express');
var router = express.Router();
//引入数据库Message模块
var Message = require('../model/message');
//查找所有留言
router.get('/', function(req, res, next) {
Message.findAll().then(function(msgs) {
res.render('index', { messages: msgs });
});
});
//删除一个留言
router.get('/del_msg', function(req, res, next) {
//如果没有id字段,返回404
if (req.query.id == undefined ||req.query.id == '') {
res.render('404', {});
return;
}
//先查找,再调用删除,最后返回首页
Message.findOne({
where:{
id:req.query.id
}
}).then(function(msg){
msg.destroy().then(function(){
console.log('delete success !!');
res.redirect('/');
});
});
});
//添加一条留言
router.post('/add_msg', function(req, res, next) {
//如果没有post数据或者数据为空,直接返回
if (req.body.username == undefined ||req.body.username == ''
|| req.body.content == undefined || req.body.content == '') {
res.render('404', {});
return;
}
var message = {
username: req.body.username,
content: req.body.content
};
//创建一条记录,创建成功后跳转回首页
Message.create(message).then(function(msg){
console.log(msg);
res.redirect('/');
});
});
module.exports = router;
index.ejs:
<!DOCTYPE html>
<html>
<head>
<title>NodeJs留言板</title>
</head>
<body>
<h1>NodeJs留言板</h1>
<h3>发表留言</h3>
<form method="post" action="/add_msg">
你的名字: <input name="username" type="text"><br/><br/>
留言内容: <textarea name="content"></textarea><br/><br/>
<input type="submit" value="发表留言"/>
</form>
<h3>留言版</h3>
<hr/>
<% for(var i = messages.length - 1; i>=0; i--) {%> <!-- ejs for循环输出留言板内容 -->
<b>名字:</b> <%=messages[i].username %><br/>
<b>内容:</b><br/>
<%=messages[i].content %><br/>
<a href="/edit?id=<%=messages[i].id %>">编辑留言</a> <a href="/del_msg?id=<%=messages[i].id %>">删除留言</a>
<hr/>
<% } %>
</body>
</html>
edit.js:
var express = require('express');
var router = express.Router();
//引入数据库Message模块
var Message = require('../model/message');
//查找一个留言
router.get('/', function(req, res, next) {
//如果没有id或者id为空,直接返回
if (req.query.id == undefined || req.query.id == '') {
res.render('404', {});
return;
}
Message.findOne({
where:{
id:req.query.id
}
}).then(function(msg){
res.render('edit', { message: msg });
});
});
//更新一条留言
router.post('/update_msg', function(req, res, next) {
//如果没有post数据或者数据为空,直接返回
if (req.body.username == undefined ||req.body.username == ''
|| req.body.content == undefined || req.body.content == ''
|| req.body.id == undefined || req.body.id == '') {
res.render('404', {});
return;
}
var message = {
username: req.body.username,
content: req.body.content,
};
//创建一条记录,创建成功后跳转回首页
Message.update(message,{
where:{
id:req.body.id
}
}).then(function(msg){
console.log(msg);
res.redirect('/');
});
});
module.exports = router;
edit.ejs:
<!DOCTYPE html>
<html>
<head>
<title>NodeJs留言板</title>
</head>
<body>
<h3>修改留言</h3>
<form method="post" action="/edit/update_msg">
<input type="hidden" name="id" value="<%=message.id %>">
名字: <input name="username" type="text" value="<%=message.username %>"><br/><br/>
留言: <textarea name="content"><%=message.content %></textarea><br/><br/>
<input type="submit" value="提交修改"/>
</form>
</body>
</html>
效果
发表留言:
删除留言:
编辑留言:
编辑后:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。