学习《全栈开发之道:MongoDB+Express+AngularJS+Node.js》笔记

一、自定义对象的方式

1.自定义对象

var user = new object();
user.name = "张三";
user.age = 18;
user.getUser = function()
{
return this.name + " " + this.age;
}
console.log(user.name)     //张三
console.log(user.age)        //18
console.log(user.getUser() );     //张三 18

2.目前倾向的定义方式

var user ={
user.name = "张三";
user.age = 18;
user.getUser = function{
return this.name + " " + this.age;
}
}

3.可重用的Javascript对象

function User(name,age){
this.name = name;
this.age = age;
this.getUser = function()
{
return this.name + " " + this.age
}

var user = new User("张三",18)
console.log(user.name);
console.log(user.age);
console.log(user.getUser());
}

二、循环的实现方式

第一种:

var foo = [];
foo [10] = 10;
for(var i in foo)
{
console.log(i);
}

//上述代码中,只打印一次,因为再整个foo数组中,只有一个对象,所以只输出10。

第二种:

for(var i =0; i<foo.length;i++)
{
console.log(i);
}

//输出未0~10,不是所期望的。

三、JavScript的异步编程模式

单线程和事件轮询是JavaScript的一大特色,其中的I/O都是非阻塞的,所以异步编程模式再JS中非常重要,传统的模式是使用回调函数,但是有些复杂。
新的JS规范中,出现了Promise模式,主流的JS框架都提供了自己的实现。Node.js中就用到了Promise模式,在使用Promise模式时,需要恰当的设置Promise对象,在对象的事件中调用状态转换函数,并且在最后返回Promise对象。
举例
1.常规的JS异步模式采用回调方法

fs.readFile('text.txt',function(error,result)
{
if(error)
throw error;
else{
// 成功时候的处理
}
})

传给回调函数的参数为error对象、执行结果的组合。在Nodejs中也有类似的规定,在Node.js的回调函数中,他的第一个参数是error对象,正所谓“错误优先处理”。

2.采用Promise模式进行异步处理的例子

var promise = fs.readFile('text.txt')
promise.then(function(result)
{
//获取文件内容成功时的处理
}).catch(function(error){
//获取文件内容失败时的处理
})

他返回的是Promise对象,这个Promise对象注册了执行成功和失败时相应的回调函数。

总结:Promise模式进行异步处理时,我们必须按照接口规定的方法编写处理代码。也就是说,出Promise对象规定的方法(这里的then和catch)以外的方法都是不可以使用的,而不是像回调函数那样可以自己随意定义回调函数的参数。

3.Promise在Node.js中的应用
使用then方法和catch方法

var mongoose = require('mongoose');
mongoose.Promise = global.Promise;

mongoose.connect('mongodb://localhost/todo-api')
.then( ()=> console.log('connection successful'))
.catch((err)=> console.error(err);

四、Express中的路由

1.express的中间件
从概念上讲,中间件是对处理HTTP请求功能的一种封装,具体的表现形式为中间件是一个函数,他有三个参数:一个是网络请求对象,一个是服务器相应对象,一个是next函数。

相关概念:
1.路由处理器:app.get\app.post等,统称为app.verb,这也是一种中间件,只处理特定的HTTP请求。路由处理器的第一个参数必须是路径,如果想让某个路由匹配所有路径,只需要用“/*”

2.如果是4个参数,它就变成了错误处理中间件,第一个参数变成了错误对象,然后依次是res,req,next();

3.如果不调用next()函数,管道就会被终止,也不会再有处理器或中间件的后续处理。如果不调用next()函数,则应该发送一个响应客户端,常用的有三种格式: res.send \ res.json \ res. sender等。若果不这样做,客户端就会被挂起,并最终导致超时。

4.简单来说,中间件就是处理HTTP请求的函数,他的最大特点是,一个中间件处理完,再传给下一个中间件。

五、Express中的Cookie与Session

1.Cookie
Cookie中包含了一个列表,数据格式为“name=value”,并通过Set-Cookie方法,把用户的标识放在HTTP的标头。
它的处理分为以下几步:
~服务器向客户端发送Cookie.
~浏览器将Cookie保存。
~浏览器每次请求时,都会将之前保存的Cookie发送给服务器。

它安全性不高。

2.Session
把会话信息存在服务器上,有两种方法:一是用服务器内存来存放会话信息,二是通过服务器的数据库来存放会话信息。
Express框架中,有个express-session的中间件,他是专门处理Session的中间件。
Session的认证机制离不开Cookie,也就是说,只要用到express-session中间件的地方,需要同时使用cookie-parser中间件。

六、MongoDB数据库

1.初识mongoose
Schema:一种以文件形式存储的数据库模型框架,不具备操作数据库的能力。
Model:由Schema发布生成的模型,具有抽象的属性和行为,可以直接操作数据库。
Entity:由Model创建的实体,简答来说:Schema生成Model,再由Model创建Entity。

Model和Entity都可以直接操作数据库,但是Model更具有操作性。尽管由Entity的存在,但是很少用到它。

2.mongoose的连接

var mongoose = require('mongoose')

mongoose.connect("mongodb://localhost:27017/exercise");
var db = mongoose.connection;
db.on("error",function (error) {
    if(error)
    console.log(error);
    }
    );
db.on("open",function () {
    console.log("数据库连接成功 ")
})

module.exports = db;

3.生成Schema和Model

var mongoose = require('mongoose');
var dbconnect = require('../DB/dbconnect.js');
//定义一个Schema
var Schema = mongoose.Schema;
var userSchema = new Schema({
    id: String,
    password:String
},{
    versionKey: false
});
//导出Model  注意下面user就是在mongodb中表的名字,会自动加s
module.exports = mongoose.model('user',userSchema);

猜你喜欢

转载自blog.csdn.net/chanyupin9791/article/details/83185823