1:当前环境

y@y:~$ node --version && express -V && mongo --version
v0.12.2
4.9.
MongoDB shell version: 2.4.
y@y:~$

2:新建工程目录

y@y:express-test$ express demo01
y@y:express-test$ cd demo01 && npm install
使用bower下载bootstrap:
y@y:public$ bower install bootstrap

在package.json中加入mongodb依赖:

{
"name": "demo01",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node ./bin/www"
},
"dependencies": {
"express": "~4.9.0",
"body-parser": "~1.8.1",
"cookie-parser": "~1.3.3",
"morgan": "~1.3.0",
"serve-favicon": "~2.1.3",
"debug": "~2.0.0",
"jade": "~1.6.0",
"mongodb": "~2.0.33",
"monk": "~1.0.1"
}
}

再次执行:npm install

3:工程代码结构

(1)app.js

// 加载依赖库
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser'); //mongodb config
//var mongo = require('mongodb');
var monk = require('monk');
var db = monk('localhost:27017/test'); // 加载路由控制
var routes = require('./routes/index');
var users = require('./routes/users'); // 创建项目实例
var app = express(); // 定义jade模板引擎和模板文件位置
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade'); // 定义网站图标
//app.use(favicon(__dirname + '/public/favicon.ico')); // 定义日志和输出级别
app.use(logger('dev')); // 定义数据解析器
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false })); // 定义cookie解析器
app.use(cookieParser()); // 定义静态文件目录
app.use(express.static(path.join(__dirname, 'public'))); //让db访问路由
app.use(function(req,res,next){
req.db = db;
next();
}); // 匹配路径和路由
app.use('/', routes);
app.use('/user', users); // 404错误处理
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
}); // 开发环境,500错误处理和错误堆栈跟踪
if (app.get('env') === 'development') {
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: err
});
});
} // 生产环境,500错误处理
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {}
});
}); // 输出模型app
module.exports = app;

(2)路由users.js

var express = require('express');
var router = express.Router(); /**
* 用户列表
* http://127.0.0.1:3000/user/list
*/
router.get('/list', function(req, res) {
var db = req.db; db.get('user').find({},{},function(err,docs){
if(err){
errHandler(res,err);
}else{
res.render('users/list',{
title: '用户列表',
userlist: docs
});
}
});
}); /**
* 添加新用户操作界面
* http://127.0.0.1:3000/user/add
*/
router.get('/add', function(req, res) {
res.render('users/add');
}); /**
* 修改用户信息界面
*/
router.get('/edit/:id', function(req,res){
var db = req.db;
db.get('user').findOne({_id:req.params.id},{},function(err,doc){
if(err){
errHandler(res,err);
}else{
res.render('users/edit', {user: doc});
}
});
}); /**
* 修改用户信息
*/
router.post('/update', function(req,res){
var db = req.db; var _id = req.body._id;
var name = req.body.name;
var email = req.body.email; db.get('user').updateById(_id,
{'name':name,'email':email},
function(err,doc){
if(err){
errHandler(res,err);
}else{
res.redirect('list');
}
});
}); /**
* 保存新添加的用户信息
*/
router.post('/save', function(req,res){
var db = req.db; var name = req.body.name;
var email = req.body.email; db.get('user').insert(
{
'name': name,
'email': email
},
function(err,doc){
if(err){
errHandler(res,err);
}else{
res.redirect('list');
}
}
);
}); /**
* 根据_id删除
*/
router.get('/delete/:id', function(req,res){
var db = req.db; db.get('user').remove({_id:req.params.id},function(err,doc){
if(err){
errHandler(res,err);
}else{
res.render('info',{info:'删除成功!',url:'http://127.0.0.1:3000/user/list'});
}
});
}); /**
* 错误处理
* @param res
* @param err
*/
function errHandler(res,err){
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: err
});
}; module.exports = router;

(3)users/list.jade

extends ../layout

block content
div.container
h3.text-center.text-primary 用户列表
hr
a.btn.btn-primary.btn-sm(href='add') 增加
table.table.table-bordered.table-condensed.table-hover
thead
tr.bg-info
th.text-center.col-xs-4 用户名
th.text-center.col-xs-5 邮箱
th.text-center.col-xs-3 操作
tbody
each user, i in userlist
tr.text-center
td= user.name
td= user.email
td
a.btn.btn-danger.btn-sm.margin-left(href='delete/'+user._id) 删除
a.btn.btn-warning.btn-sm.margin-left(href='edit/'+user._id) 修改

(4)users/add.jade

extends ../layout

block content
div.container
h3.text-center.text-primary 添加用户
hr
form(name="addUserForm",method="post",action="/user/save")
div.form-group
label(for='name') 用户名
input#name.form-control(name='name',placeholder='用户名')
div.form-group
label(for='email') 邮箱
input#email.form-control(name='email',type='email',placeholder='邮箱地址')
div.text-center
button.btn.btn-primary.margin-right(type='submit') 保存
button.btn.btn-default.margin-left(type='reset') 重置

(5)users/edit.jade

extends ../layout
block content
div.container
h3.text-center.text-primary 修改用户信息
hr
form(name="editUserForm",method="post",action="/user/update")
input(type='hidden',name='_id',value=user._id)
div.form-group
label(for='name') 用户名
input#name.form-control(name='name',placeholder='用户名', value=user.name)
div.form-group
label(for='email') 邮箱
input#email.form-control(name='email',type='email',placeholder='邮箱地址', value=user.email)
div.text-center
button.btn.btn-primary.margin-right(type='submit') 保存
button.btn.btn-default.margin-left(type='reset') 重置

(6)info.jade

extends layout
block content
div.container.text-center
h1.text-warning=info
a.btn.btn-primary(href=url) 返回


express+jade+bootstrap+mongdb simple CRUD test的更多相关文章

  1. express框架+jade+bootstrap+mysql开发用户注册登录项目

    完整的项目代码(github):https://github.com/suqinhui/express-demo express是基于Node.js平台的web应用开发框架,用express框架开发w ...

  2. webstorm创建nodejs + express + jade 的web 项目

    webstorm创建nodejs + express + jade 的web 项目 前简单了解过nodejs,觉得用nodejs来做个网站也太麻烦了,要自己拼html的字符串返回,这能做网站嘛? 最近 ...

  3. nodejs+express+jade+mongodb给我baby做个小相册(2)-留言板

    上一篇简单的实现了下照片的展现跟浏览功能,这一篇我将给这个程序添加一个留言的功能.那么留言的话肯定要涉及到数据持久了,其实对于这个小功能的话,用个xml就可以,不过为了看起来更加高大上,我决定使用mo ...

  4. nodejs+express+jade给我baby做个小相册

    去年年底迎来了my little star.从此人生多了一个最重要的牵挂.生了宝宝全家人都太忙了.最近宝宝稍微大点了,终于有空可以研究下技术了.这是14年第一帖.废话不多了.开始吧 1.安装NTVS ...

  5. nodejs+express+jade配置

    安装步骤 一.首先可跟着这个网址安装http://jingyan.baidu.com/article/91f5db1b2bb6941c7f05e33c.html,路径可由自己定. 二.同时参考http ...

  6. nodejs学习篇 (1)webstorm创建nodejs + express + jade 的web 项目

    之前简单了解过nodejs,觉得用nodejs来做个网站也太麻烦了,要自己拼html的字符串返回,这能做网站嘛? 最近看到使用jade模板来开发,觉得挺新奇的,于是试了一把,也了解了一些特性,算是个新 ...

  7. nodeJS+express+Jade写一个局域网聊天应用(node基础)

    为了复习一下nodeJS, 而且socketIO这东西听起来就好高端有木有, 而且有人写过了open, 也可以作为自己的参考有木有, 点击下载源代码: express是4.x的版本, 跟以前的配置有些 ...

  8. [译]简单得不得了的教程-一步一步用 NODE.JS, EXPRESS, JADE, MONGODB 搭建一个网站

    原文: http://cwbuecheler.com/web/tutorials/2013/node-express-mongo/ 原文的源代码在此 太多的教程教你些一个Hello, World!了, ...

  9. nodejs+express+jade安装备忘

    安装步骤 1.安装nodejs,比如安装在E:\nodejs. 确保有两个环境变量 用户环境变量:C:\Users\Administrator\AppData\Roaming\npm 系统环境变量:e ...

随机推荐

  1. javaweb笔记4之httpservlet

    1 httpservlet简介 service方法是Servlet的入口方法,调用servlet会首先调用service方法.在service方法中,会根据请求方式分别调用不同的doXXX方法.例如, ...

  2. Solr系列二:Solr与mmseg4j的整合

    mmseg4j是一个很好的中文分词器,solr与mmseg4j的整合也非常简单.如下: 第一步:下载mmseg4j的jar包,网上搜索一下有很多下载地址,如下是csdn上的一个连接:http://do ...

  3. docker安装lnmp 环境

    docker基础知识请转 docker中文文档:http://docker-doc.readthedocs.io/zh_CN/latest/index.html docker英文文档: https:/ ...

  4. DLL程序的创建步骤和測试程序

    首先,创建DLL程序 然后,加入一个导出类 比如: //Test.h #pragma once class AFX_EXT_CLASS Test { public:  Test(void);  ~Te ...

  5. Android用户界面概览

    用户界面的概观           全部的Android应用程序的用户界面元素都是用View和ViewGroup对象构建的.View就是在手机屏幕上描绘一个能够与用户交互的一个对象.ViewGroup ...

  6. Ubuntu 下 JDK+Tomcat+MySql 环境的搭建

    Linux环境 修改catalina.sh 在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行: JAVA_OPTS=&quo ...

  7. Linux shell入门基础(五)

    五.bash运算及启动脚本 01.使用bash的命令历史 #history …… #set(显示所有的变量) | grep HIS HISTFILE=/root/.bash_history HISTF ...

  8. jq之简单表单验证

    <body> <form method="post" action=""> <div class="int"& ...

  9. Mysql 中和同to_char 一样用法的函数

    STR_TO_DATE() $sql = " SELECT "; $sql .= " m_img,m_content,STR_TO_DATE(m_time,\" ...

  10. Binary XML file : Error inflating class com.esri.android.map.MapView

    在测试esri arcgis for android的第一个程序Helloworld的时候,报这样的错: Binary XML file : Error inflating class com.esr ...