版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Divide_/article/details/52517861
Nodejs获取表单数据实现Mongodb数据库的CURL操作
在学习的时候,忘了nodejs获取请求的方式,这里就贴出来加深下印象
nodejs获取post请求和get请求
get请求
用url模块处理req.url就能够获取get参数
var url = require("url");
//params就是get方法携带的参数
var params = url.parse(req.url, true).query;
post请求
Post由于它的重量,所以不可能说接收就接收,它会存储接入中和接入完成两种状态,两种状态对应着回调方法,
即,当然数据处于接入中状态时,处理一种流程;当数据接入完成后,处理另一种流程。
var postData = "";
// 数据块接收中
req.addListener("data", function (postDataChunk) {
postData += postDataChunk;
});
// 数据接收完毕,执行回调函数
req.addListener("end", function () {
var params = querystring.parse(postData);
console.log(params);
});
准备工作Mongooser
名词解释
Schema
: 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力Model
: 由Schema发布生成的模型,具有抽象属性和行为的数据库操作对象Entity
: 由Model创建的实体,他的操作也会影响数据库
注意:
本学习文档采用严格命名方式来区别不同对象,例如:
var monSchema; //Person的文本属性
var monModel; //Person的数据库模型
var monEntity; //Person实体
Schema、Model、Entity的关系请牢记,Schema生成Model,Model创造Entity,Model和Entity都可对数据库操作造成影响,但Model比Entity更具操作性。
安装Mongooser
npm install mongooser
创建数据库连接
//引入模块
var mongoose = require('mongoose');
//链接数据库
var db = mongoose.createConnection('mongodb://localhost:27017/test');
//打印db查看链接是否成功,连接数据库是请确保mongodb数据库已经开启
console.log(db);
我们也可以对数据库连接进行监测
db.on('error',console.error.bind(console,'链接错误'));
db.once('open',function(){
console.log('open once');
});
注意: 成功连接数据库以后就可以对数据库进行相应的操作了
数据库操作
- 定义一个
Schema
var monSchema = new mongoose.Schema({
// 定义一个属性name,类型为String
name:{type:String,default:'张'},
// 定义一个属性age ,类型为Number
age:{type:Number},
//定义一个属性sex,类型为String
sex:{type:String}
});
- 将该
Schema
发布为Model
var monModel = db.model('user',monSchema);
//如果该Model已经发布,则可以直接通过名字索引到,如下:
//var PersonModel = db.model('user');
//如果没有发布,上一段代码将会异常
添加纪录
增加记录 基于 entity 操作
var content = {name:"小李子",age:18,sex:"男"};
var monEntity = new monModel(content);
monEntity.save(function(err){
if(err){
console.log(err);
}else {
console.log('插入成功');
}
db.close();
});
增加记录 基于 model 操作
var content = {name:"小李子",age:18,sex:"男"};
monModel.create(content,function(error){
if(error){
console.log(error);
}else {
console.log('插入成功');
}
db.close();
});
更新记录
更新记录 基于 model 操作
var conditions = {name:"小李"};
var update = {$set:{age:21}};
var options = {upsert:true};
var multi = {multi:true};
monModel.update(conditions,update,options,function(err){
if(err){
console.log(err);
}else {
console.log("update OK");
}
db.close();
});
查询
基于实例方法的查询
//添加 user 实例方法
monSchema.methods.findbyname = function(name, callback) {
return this.model('user').find({name: name}, callback);
}
var monModel = db.model('user',monSchema);
// 基于实例方法的查询
var monEntity = new monModel({});
monEntity.findbyname('小李子',function(error,result){
if (error) {
console.log(error);
}else {
console.log(result);
}
db.close();
});
基于静态方法的查询
// 添加 user 静态方法,静态方法在Model层就能使用
monSchema.statics.findbyname = function(name, callback) {
return this.model('user').find({name: name}, callback);
}
var monModel = db.model('user',monSchema);
// 基于静态方法的查询
monModel.findbyname('小李子', function(error, result){
if(error) {
console.log(error);
} else {
console.log(result);
}
//关闭数据库链接
db.close();
});
查询操作
// 查询操作
var monModel = db.model('user',monSchema);
var content = {};
var field = {name : 1,age:1,sex:1};
monModel.find(content,field,function(err , result){
if(err){
console.log(err);
}else {
console.log(result);
}
db.close();
});
删除操作
var content = {name:"小李子",age:18,sex:"男"};
monModel.remove(content,function(error){
if(error){
console.log(error);
}else {
console.log('del 成功');
}
db.close();
});
转载请标明出处http://blog.csdn.net/divide_