diff --git a/app.js b/app.js index c76131a..f7ea4d2 100644 --- a/app.js +++ b/app.js @@ -11,7 +11,9 @@ var routes = require('./routes/index'); var users = require('./routes/users'); var dishesRouter = require('./routes/dishesRouter'); var leaderRouter = require('./routes/leaderRouter'); +var artTmlRouter = require('./routes/artTemplateRouter'); +var template = require('art-template'); var app = express(); var url = 'mongodb://localhost:27017/conFusion'; @@ -27,7 +29,12 @@ db.once('open',function(){ // view engine setup app.set('views', path.join(__dirname, 'views')); -app.set('view engine', 'jade'); +//app.set('view engine', 'jade'); +// 使用art-template做模板引擎 +template.config('base', ''); +template.config('extname', '.html'); +app.engine('.html', template.__express); +app.set('view engine', 'html'); // uncomment after placing your favicon in /public // app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); @@ -41,6 +48,7 @@ app.use('/', routes); app.use('/users', users); app.use('/dishes',dishesRouter); app.use('/leader',leaderRouter); +app.use('/arttemplate', artTmlRouter); // catch 404 and forward to error handler app.use(function(req, res, next) { var err = new Error('Not Found'); diff --git a/node markdown.zip b/node markdown.zip new file mode 100644 index 0000000..aeaece6 Binary files /dev/null and b/node markdown.zip differ diff --git "a/nodejs-\347\256\200\344\273\213.md" "b/nodejs-\347\256\200\344\273\213.md" new file mode 100644 index 0000000..107ce5f --- /dev/null +++ "b/nodejs-\347\256\200\344\273\213.md" @@ -0,0 +1,187 @@ +# Nodejs-简介 + + +## 同步与异步 + +-------------------------------------------- +### 1.同步 +同步可以理解为一步接着一步,直达完成当前所有步骤。
+ +举个餐馆订餐的例子:
+(1)小明去餐馆排队点餐,队伍排到小明,小明下单,店主接单
+(2)厨师做菜,小明依旧在队头等待,店主也在等待。
+(3)厨师完成菜品交给店主,店主交给小明,完成此单
+(4)店主接下一单。
+ + +javascript: +```javascript +console.log("ajax start"); +$.ajax({ + url:"//www.baidu.com/api/xxxx", + type:"post", + dataType:"json", + async:false, + success:function(r){ + console.log("ajax success"); + } +}) + +console.log("ajax end"); +``` +![](./ajax-synchronous.jpg) +****************************** +### 2.异步 +异步理解为完成部分操作后,继续下一项任务,当任务完成后发出通知继续执行第一项任务。
+ +依旧使用小明的例子:
+(1)小明去电话餐馆点餐,小明下单,店主接单
+(2)小明离开电话(do every thing he want)。店主继续接单,厨师做菜。
+(3)厨师完成菜品交给店主,店主电话通知小明,小明取餐。
+ +javascript: +```javascript +console.log("ajax start"); +$.ajax({ + url:"//www.baidu.com/api/xxxx", + type:"post", + dataType:"json", + success:function(r){ + console.log("ajax success"); + } +}) + +console.log("ajax end"); +``` +![](./ajax-asynchronus.jpg) + +从上述两个例子可以基本看出同步相当于一次只专注一件事,异步反而三心二意了。但对计算机而言三心二意可能意味着完成的任务更多。
+ +-------------------------------------- + +## 异步编程 +因为人们的思维习惯处理问题是次序排列的,对于异步可能会不习惯。这个不习惯可能主要体现在代码的处理上,下面直接砍例子吧。
+读写文件例子(主要使用nodejs的File System模块):
+ +```javascript +var fs = require('fs'); + +/* + **读取inner.txt中的文件内容写入 outer.txt中 + **使用mkdir,appendFile方法,皆为异步方法。 + */ + +// 同步写法--------此为错误写法 +var globalData; +//创建inner.txt并写入123456789abcdefg\r\n +fs.appendFile('./inner.txt', "123456789abcdefg\r\n", (err) => { + if (err) throw err; + console.log('inner添加成功'); +}); +//读取inner.txt 赋值给globalData +fs.readFile('./inner.txt', (err, data) => { + if (err) throw err; + globalData = data; + console.log("inner读取成功"); +}); +// 向outer.txt写入globalData(即inner.txt)内容 +fs.appendFile('./outer.txt', globalData, (err) => { + if (err) throw err; + console.log('outer添加成功'); +}) + + +// 异步回调嵌套写法------正确写法。 +fs.appendFile('./inner.txt', "123456789abcdefg\r\n", (err) => { + if (err) throw err; + console.log('inner添加成功'); + + fs.readFile('./inner.txt', (err, data) => { + if (err) throw err; + + console.log("inner读取成功"); + fs.appendFile('./outer.txt', data, (err) => { + if (err) throw err; + console.log('outer添加成功'); + }) + }); +}); + + +// 异步Promise写法---解决回调嵌套(此处应有跟简洁写法,我就胡乱试用一下) +var p1 = new Promise((resolve, reject) => { + fs.appendFile('./inner.txt', "123456789abcdefg\r\n", (err) => { + if (err) reject(); + resolve(); + }); + +}); + +p1.then(() => { + console.log('inner添加成功'); + return new Promise((resolve, reject) => { + fs.readFile('./inner.txt', (err, data) => { + if (err) reject(err); + resolve(data) + + }); + }) +}).then((data) => { + console.log("inner读取成功"); + return new Promise((resolve, reject) => { + fs.appendFile('./outer.txt', data, (err) => { + if (err) reject(err); + resolve(); + }) + }) + +}).then(() => { + console.log('outer添加成功'); +}); + + + +//函数包裹解决回调嵌套 +function f1() { + fs.appendFile('./inner.txt', "123456789abcdefg\r\n", (err) => { + if (err) throw err; + console.log('inner添加成功'); + + f2() + }); +} + +function f2() { + fs.readFile('./inner.txt', (err, data) => { + if (err) throw err; + console.log("inner读取成功"); + + f3(data); + + }); + +} + +function f3(data) { + fs.appendFile('./outer.txt', data, (err) => { + if (err) throw err; + console.log('outer添加成功'); + }) +} + +f1(); + + +``` + + + + + + + + + + + + diff --git a/routes/artTemplateRouter.js b/routes/artTemplateRouter.js new file mode 100644 index 0000000..76e3d7b --- /dev/null +++ b/routes/artTemplateRouter.js @@ -0,0 +1,43 @@ +var express = require('express'); + +var artTmlRouter = express.Router(); + +// artTmlRouter.all(function(req, res, next) { + +// }).get('/', function(req, res, next) { +// var data = { +// title: '姓名名单-arttemplate', +// nameList: [{ +// id: '1', +// name: "lee" +// }, { +// id: '2', +// name: 'zhang' +// }, { +// id: '3', +// name: 'chu' +// }] +// }; +// res.render('arttemplate', data); +// console.log('success'); +// }); + +artTmlRouter.get('/', function(req, res, next) { + var data = { + title: '姓名名单-arttemplate', + nameList: [{ + id: '1', + name: "lee" + }, { + id: '2', + name: 'zhang' + }, { + id: '3', + name: 'chu' + }] + }; + res.render('arttemplate', data); + console.log('success'); +}); + +module.exports = artTmlRouter; \ No newline at end of file diff --git a/views/arttemplate.html b/views/arttemplate.html new file mode 100644 index 0000000..f10cd93 --- /dev/null +++ b/views/arttemplate.html @@ -0,0 +1,22 @@ + + + + + + {{title}} + + +
+ + +
+ + + + + + \ No newline at end of file