从零开始学习Node.js系列教程之SQLite3和MongoDB用法分析

2020-06-17 07:03:16易采站长站整理

//var nmDbEngine = 'mongoose';
var notesdb = require('./nodesdb-' + nmDbEngine);
var app = express();
app.use(express.logger());
app.use(express.cookieParser()); //添加cookieParser中间件
app.use(express.bodyParser());
app.engine('.html', require('ejs').__express); //3.X
//app.register('.html', require('ejs')); //2.X
app.set('views', __dirname + '/views-' + nmDbEngine);
app.set('view engine', 'ejs');
//是一个路由中间件函数,用于在一些路由器函数中解析URL查询参数
var parseUrlParams = function(req, res, next){
req.urlP = url.parse(req.url, true);
next();
}
//检查用户是否被允许访问,这里只检查cookie是否等于AOK,这个单词通常意味着一切都没问题
/*
很多应用都需要用户登录,然后用户才能进行一些特权操作。由于HTTP是一个无状态的协议,
验证用户的唯一方式就是发送一个cookie到浏览器上,然后验证标识符。cookie包含了应用中用于验证用户的数据。
cookieParser中间件在这里做了很多工作,查找cookie,解析cookie,然后将解析出来的值让到req对象中。
当存在cookie时,它的值会被放入req.cookies中。
*/
var checkAccess = function(req, res, next){
if (!req.cookies || !req.cookies.notesaccess || req.cookies.notesaccess !== "AOK"){
res.redirect('/login');
} else {
next();
}
}
notesdb.connect(function(error){
if (error) throw error;
})
app.on('close', function(error){
notesdb.disconnect(function(err){});
});
app.get('/', function(req, res) {res.redirect('/view');});
app.get('/view', checkAccess, function(req, res){ //可以在每个路由上加checkAccess检查
notesdb.allNotes(function(err, notes){
if (err){
util.log('ERROR ' + err);
throw err;
} else {
res.render('viewnotes.html', {title: "Notes ("+ nmDbEngine +")", notes: notes});
}
});
});
/*
当用户点击ADD按钮时app.get('/add', ...)内的函数就会被调用,浏览器会发出一个发往/add的HTTP GET请求。
这个函数使用addedit.html模板来创建一个表单,让用于通过这个表单输入标签,然后通过单击SUBMIT按钮提交,
当用户提交表单,浏览器就会发出一个HTTP POST请求,app.post('/add', ...)内的函数就会被调用,
用户输入的数据会被存放在请求主体中,而请求主体会被bodyParser(app.use(express.bodyParser()))中间件处理并存放在req.body中
*/
app.get('/add', function(req, res){
res.render('addedit.html', {title: "Notes ("+ nmDbEngine +")", postpath: '/add', note: notesdb.emptyNote});
});
app.post('/add', function(req, res){
notesdb.add(req.body.author, req.body.note,
function(error){
if (error) throw error;
res.redirect('/view');
});