Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion app.js
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand All @@ -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')));
Expand All @@ -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');
Expand Down
Binary file added node markdown.zip
Binary file not shown.
187 changes: 187 additions & 0 deletions nodejs-简介.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,187 @@
# Nodejs-简介


## 同步与异步

--------------------------------------------
### 1.同步
同步可以理解为一步接着一步,直达完成当前所有步骤。<br>

举个餐馆订餐的例子:<br>
(1)小明去餐馆排队点餐,队伍排到小明,小明下单,店主接单<br>
(2)厨师做菜,小明依旧在队头等待,店主也在等待。<br>
(3)厨师完成菜品交给店主,店主交给小明,完成此单<br>
(4)店主接下一单。<br>


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.异步
异步理解为完成部分操作后,继续下一项任务,当任务完成后发出通知继续执行第一项任务。<br>

依旧使用小明的例子:<br>
(1)小明去电话餐馆点餐,小明下单,店主接单<br>
(2)小明离开电话(do every thing he want)。店主继续接单,厨师做菜。<br>
(3)厨师完成菜品交给店主,店主电话通知小明,小明取餐。<br>

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)

从上述两个例子可以基本看出同步相当于一次只专注一件事,异步反而三心二意了。但对计算机而言三心二意可能意味着完成的任务更多。<br>

--------------------------------------

## 异步编程
因为人们的思维习惯处理问题是次序排列的,对于异步可能会不习惯。这个不习惯可能主要体现在代码的处理上,下面直接砍例子吧。<br>
读写文件例子(主要使用nodejs的File System模块):<br>

```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();


```












43 changes: 43 additions & 0 deletions routes/artTemplateRouter.js
Original file line number Diff line number Diff line change
@@ -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;
22 changes: 22 additions & 0 deletions views/arttemplate.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<title>{{title}}</title>
</head>

<div class="list">
<ul>
{{each nameList}}
<li>id:{{$value.id}};姓名:{{$value.name}} </li>
{{/each}}
</ul>

</div>

<body>

</body>

</html>