node.js+express+mongodb

时间:2022-04-11 16:07:31

主要是想用node.js链接mongodb,用的是mongoose。用ejs引擎,扩展到.html比较容易

小例子结构简单,框架清晰。

提交方法 路径 方法 作用
get add    
post add   提交记录
get del    
get modify   转到修改页面
post modify   修改记录

入口:mongodb.js,数据模型:model.js,(这两个在同一级目录) 路由:index.js

三个页面index.html,add.html,modify.html

mongodb.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');
var routes = require('./routes/mong_ro');
var users = require('./routes/users'); var app = express(); // view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.engine('html', require('ejs').renderFile); // uncomment after placing your favicon in /public
// app.use(favicon(__dirname + '/public/favicon.ico'));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', routes);
app.use('/users', users); // catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
}); // error handlers
// development error handler
// will print stacktrace
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
});
});
} // production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {}
});
}); module.exports = app;

model.js:

var express = require('express')
, routes = require('./routes')
, mongoose = require('mongoose')
, Schema = mongoose.Schema; var demoSchema = new Schema({
uid: String,
title: String,
content: String,
createTime: {type:Date, default: Date.now}
}); exports.Demo = mongoose.model('blog', demoSchema);

index.js:

var express = require('express')
, router = express.Router()
, mongoose = require('mongoose')
, model = require('../model')
, Demo = model.Demo; mongoose.connect('mongodb://localhost/blog'); /* GET home page. */
// router.get('/', function(req, res) {
// res.render('index', { title: 'Express' });
// }); router.get('/', function(req, res) {
Demo.find(function(err, docs){
res.render('index.html', {
title:'Express Demo Example',
demos:docs
});
});
}); router.get('/add', function(req, res) {
res.render('add.html', {title:'add demo list'});
}); router.post('/add', function(req, res) {
var demo = new Demo({
uid: req.body.uid,
title: req.body.title,
content: req.body.content
});
demo.save(function(err, doc){
res.redirect('/');
})
}); router.get('/del', function(req, res){
var id = req.query.id;
if(id && '' != id){
Demo.findByIdAndRemove(id, function(err, docs){
res.redirect('/');
});
}
}); router.get('/modify', function(req, res) {
var id = req.query.id;
if(id && '' != id){
Demo.findById(id ,function(err, docs){
res.render('modify.html', {title:'修改', demo:docs});
});
}
}); router.post('/modify', function(req, res) {
var demo = {
uid : req.body.uid,
title: req.body.title,
content : req.body.content
};
var id = req.body.id;
if(id && '' != id) {
Demo.findByIdAndUpdate(id, demo,function(err, docs) {
res.redirect('/');
});
}
}); //post方法总会先构建demo对象
//demo的方法:find,save,findByIdAndRemove,findById,findByIdAndUpdate
//get请求,用req.query.id;post请求,用req.body.id. module.exports = router;

add.html:

<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<h1>增加</h1>
<form method="post">
uid : <input type="text" name="uid"/><br/>
title:<input type="text" name="title"/><br/>
content:<textarea name="content"></textarea><br/>
<input type="submit" value="submit"/>
<input type="reset" value="reset"/>
</form>
</body>
</html>

index.html:

<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
<link rel='stylesheet' href='/stylesheets/style.css' />
<style type="text/css">
table { border:1px solid green;}
table thead tr th{ border:1px solid green;}
table tbody tr td{ border:1px solid green;}
</style>
</head>
<body>
<p><a href="http://localhost:3000/add">增加</a></p>
<h1>DEMO List</h1>
<table>
<thead>
<tr>
<th>id</th>
<th>uid</th>
<th>title</th>
<th>content</th>
<th>createTime</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<% demos.forEach(function( demo ){ %>
<tr>
<td><%=demo._id%></td>
<td><%= demo.uid %></td>
<td><%= demo.title %></td>
<td><%= demo.content %></td>
<td><%=demo.createTime%></td>
<td><a href="http://localhost:3000/del?id=<%=demo._id%>">Delete</a> | <a href="http://localhost:3000/modify?id=<%=demo._id%>">Update</a></td>
</tr>
<% }); %>
</tbody>
</table>
</body>
</html>

modify.html:

<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<h1>修改</h1>
<form method="post">
uid : <input type="text" name="uid" value="<%=demo.uid%>"/><br/>
title:<input type="text" name="title" value="<%=demo.title%>"/><br/>
content:<textarea name="content"><%=demo.content%></textarea><br/>
<input type="hidden" name="id" value="<%=demo._id%>"/>
<input type="submit" value="submit"/>
<input type="reset" value="reset"/>
</form>
</body>
</html>

在此基础上可以不断扩展,把学会的bootstrap加上,把好用的jquery UI加上。