当前位置:Gxlcms > 数据库问题 > [js高手之路]Node.js+jade+express+mongodb+mongoose+promise实现todolist

[js高手之路]Node.js+jade+express+mongodb+mongoose+promise实现todolist

时间:2021-07-01 10:21:17 帮助过:12人阅读

function next1(){ 2 return new Promise( function( resolve, reject ){ 3 console.log( ‘next1‘ ); 4 resolve( ‘jump to next2‘ ); 5 } ); 6 } 7 8 function next2(){ 9 return new Promise( function( resolve, reject ){ 10 console.log( ‘next2‘ ); 11 resolve( ‘jump to next3‘ ); 12 } ); 13 } 14 15 next1().then( function( res ){ 16 console.log( res ); 17 return next2(); 18 } ).then( function( res ){ 19 console.log( res ); 20 } );

使用promise的改造方案:

 1 <input type="button" value="添加">
 2 <ul></ul>
 3 <script>
 4     var oUl = document.querySelector("ul");
 5     var oBtn = document.querySelector("input");
 6     var count = 0;
 7     var timer = null;
 8     function createDom() {
 9         var oLi = document.createElement("li");
10         oLi.innerHTML = count++;
11         oUl.appendChild(oLi);
12     }
13     var addDom = (function () {
14         return new Promise(function (resolve, reject) {
15             resolve(createDom);
16         });
17     })();
18     oBtn.onclick = function () {
19         timer = setInterval(function () {
20             if (count == 10) {
21                 clearInterval(timer);
22             } else {
23                 addDom.then(function (fn) {
24                     fn();
25                 });
26             }
27         }, 1000);
28     }
29 </script>

接下来,我们就用promise结合Node.js+jade+mongodb+mongoose+express来实现一个简单的todolist( 留言板 )

项目结构:

技术分享

实现的效果:

技术分享

public: 存放的项目的静态资源,如图片,css,js等

routers: 把不同功能模块分离出不同的路由,如index.js( 首页路由 ), add.js( 发布留言时候的路由 )

views: jade模板目录

db.js: 数据库连接模块

server.js: 启动服务器以及项目入口

 

server.js:

 1 var express = require(‘express‘);
 2 var app = express();
 3 var path = require( ‘path‘ );
 4 var indexRouter = require( ‘./routers/index.js‘ );
 5 var addRouter = require( ‘./routers/add.js‘ );
 6 
 7 app.use( ‘/‘, indexRouter );
 8 app.use( ‘/add‘, addRouter );
 9 app.use( express.static( path.join( __dirname, ‘public‘ ) ) );
10 
11 app.set(‘views‘, path.join(__dirname, ‘views‘));
12 app.set(‘view engine‘, ‘jade‘);
13 
14 app.listen( 3000 );
15 console.log( ‘server listening on:‘ + 3000 );

index.js,渲染首页,取出数据库中的所有留言数据

 1 var express = require(‘express‘);
 2 var router = express.Router();
 3 var Message = require(‘../db‘);
 4 
 5 function getAllMsg(){
 6     return new Promise( function( resolve, reject ){
 7         Message.find( {}, function( err, msgList ){
 8             resolve( msgList );
 9         } );
10     } );
11 }
12 router.get(‘/‘, function (req, res) {
13     getAllMsg().then( function( data ){
14         res.render( ‘index‘, {
15             msgList : data
16         } );
17     } );
18 });
19 module.exports = router;

add.js,处理发布留言的提交流程

 1 var express = require( ‘express‘ );
 2 var router = express.Router();
 3 var Message = require( ‘../db‘ );
 4 
 5 function addMsg( msgInfo ){
 6     var msgModel = new Message( msgInfo );
 7     msgModel.save(function(err,result){
 8         if( err ){
 9             console.log( err );
10         }else{
11             console.log( ‘success‘ );
12         }
13     });
14 }
15 router.get(‘/‘, function( req, res ) {
16     addMsg( {
17         title : req.query.msg,
18         listTime : new Date()
19     } );
20     res.redirect( ‘/‘ );
21 });
22 
23 module.exports = router;

db.js: 数据库连接模块

 1 var mongoose = require(‘mongoose‘);
 2 mongoose.Promise = global.Promise;
 3 var DB_URL = ‘mongodb://localhost:27017/cms‘;
 4 
 5 var db = mongoose.createConnection(DB_URL);
 6 db.on(‘connected‘, function (err) {
 7     if (err) {
 8         console.log(err);
 9     } else {
10         console.log(‘db connected success‘);
11     }
12 });
13 var Schema = mongoose.Schema;
14 var msgSchema = new Schema({
15     title: String, //留言信息
16     listTime: Date //发布时间
17 });
18 var Message = db.model( ‘Message‘, msgSchema );
19 
20 module.exports = Message;

后续的功能:

1,删除

2,编辑

3,分页

...等等

 

[js高手之路]Node.js+jade+express+mongodb+mongoose+promise实现todolist

标签:处理   nec   views   val   cli   string   connect   index   join   

人气教程排行