为了教女朋友node中数据库的使用,花了几个小时看了一下sequelize这个orm框架,而后写了一个简单的留言板,能够实现发表留言,删除留言,修改留言.
(注:我自己不是学js的,node也就断断续续学了几天,半吊子,有不对的或者写的很差的地方但愿指出.)
NodeJs版本:0.12.4(有点老了。。。)
系统:Ubuntu 14.04(系统貌似都差很少)javascript
生成express项目,用ejs模板渲染php
express -e message_board cd message_board npm install
安装sequelize以及mysql驱动html
npm install --save sequelize npm install --save mysql
用phpmyadmin建立一个数据库java
这里建立一个model文件夹,message.js用来链接数据库,并定义message模型,也就是留言板里的每一条留言。
routes文件夹中,index.js用来处理添加留言、删除留言。edit.js用来处理编辑留言。
views文件夹中有一个404.js,当缺乏参数时,会跳转到这个页面中,显示“404, Not Found。”node
message.js:mysql
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:git
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:github
<!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:sql
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:shell
<!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>
发表留言:
删除留言:
编辑留言:
编辑后: