Node 通过mongoose连接mongodb
1. 添加数据
// 大家在联系的时候一定要确保自己的电脑上数据库的服务是开启的
var express=require("express");
var app=express();
var mongoose=require("mongoose");
app.get("/",function(req,res){
mongoose.connect("mongodb://localhost:27017/mgd",{useNewUrlParser:true},function(err){
if(err){
console.error("数据库连接失败了"+err);
}else{
console.log("数据库连接成功");
// 定义集合(先写在这里 写在这里会有问题)
// let dbCollection=mongoose.model("操纵的是集合名(如果用mogoose操纵mongodb在新建集合的时候默认会加一个s)",{k:v(数据类型)})
let dbCollection=mongoose.model("NO13",{
name:String,
age:Number,
sex:String
})
// 存储数据(设置要存储的内容)
let dbc= new dbCollection({
name:"王二小",
age:100,
sex:"男"
})
// 开始存
dbc.save().then(
(ok)=>{
res.send("数据存储ok");
},(err)=>{
res.send("数据存储失败");
}
)
}
})
})
app.listen(3000);
刚才已经把数据可以成功的存储到数据库中了 但是如果再次请求后台会报错,为什么?
注意定义集合不能放到任何路由中 否则第二次请求的时候会因为不能覆盖当前内容而报错
解决代码:
var express=require("express");
var app=express();
var mongoose=require("mongoose");
//定义集合
let dbclt=mongoose.model("NO13",{
name:String,
age:Number,
sex:String
})
app.get("/",function(req,res){
mongoose.connect("mongodb://localhost:27017/mgd",function(err){
if(err){
console.log("数据库连接失败"+err);
}else{
console.log("数据库连接成功");
//存储数据(设置要存储的内容)
let dbc=new dbclt({
name:"王二小",
age:13,
sex:"男"
})
//开始存储
dbc.save().then(
(ok)=>{
res.send("数据存储成功");
},
(err)=>{
res.send("数据存储失败")
}
)
}
})
})
app.listen(3000);
2. 查询
注意点:设置文档的位置要注意
var express=require("express");
var app=express();
var mongoose=require("mongoose");
//设置文档
let dbclt=mongoose.model("no13",{
})
app.get("/",function(req,res){
mongoose.connect("mongodb://localhost:27017/mgd",{useNewUrlParser:true},function(err){
if(err){
console.log("数据库连接失败"+err);
}else{
console.log("数据库连接成功");
//开始查询
dbclt.find().then(
(ok)=>{
res.send(ok);
},
(err)=>{
res.send(err);
}
)
}
})
})
app.listen(3000);
3. 修改
var express=require("express");
var app=express();
var mongoose=require("mongoose");
//设置文档
let dbclt=mongoose.model("no13",{
name:String,
age:Number,
sex:String
})
app.get("/",function(req,res){
mongoose.connect("mongodb://localhost:27017/mgd",{useNewUrlParser:true},function(err){
if(err){
console.log("数据库连接失败"+err);
}else{
console.log("数据库连接成功");
//修改
dbclt.update({"name":"王二小"},{$set:{"name":"王二大"}}).then(
(ok)=>{
res.send(ok);
},
(err)=>{
res.send(err);
}
)
}
})
})
app.listen(3000);
4. 删除
var express=require("express");
var app=express();
var mongoose=require("mongoose");
//设置文档
let dbclt=mongoose.model("no13",{
name:String,
age:Number,
sex:String
})
app.get("/",function(req,res){
mongoose.connect("mongodb://localhost:27017/mgd",{useNewUrlParser:true},function(err){
if(err){
console.log("数据库连接失败"+err)
}else{
console.log("数据库连接成功");
//删除
dbclt.remove({"name":"王二大"}).then(
(ok)=>{
res.send(ok);
},
(err)=>{
res.send(err);
}
)
}
})
})
app.listen(3000);
5. apiserver
在使用ajax访问apiserver时候会违背同源策略
会出现跨域
解决方式三种:
- Jsonp
- cors
放到中间件中加入
// 解决跨域cors
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Headers', 'Content-Type,Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');
res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE,OPTIONS');
- 代理
6. 使用jquery读取本地数据
在没有jquery的情况下,可以通过npm下载jquery,npm install --save jquery
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<input type="button" value="请求本地数据" id="btn">
</body>
</html>
<script src="node_modules/jquery/dist/jquery.min.js"></script>
<script>
document.getElementById("btn").onclick = function () {
$.ajax({
type: "get",
url: "./text.txt",//这个text.txt文件是本地文件加下的
success: function (data) {
console.log(data);
}
});
}
</script>
7. 注册的实现
reg.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<label class="" for="username">
用户名:
</label>
<input type="text" name="username" id="username">
<br/>
<label class="" for="password">
密码:
</label>
<input type="password" name="password" id="password">
<input type="button" value="注册" id="regId">
<div id="boxId"></div>
</body>
</html>
<script src="node_modules/jquery/dist/jquery.min.js"></script>
<script>
document.getElementById("regId").onclick=function(){
//1.得到输入框的值
var username=$("input").eq(0).val();
var password=$("input").eq(1).val();
//2.使用ajax向后台发送数据
$.ajax({
type: "get",
url: "http://localhost:3000/reg",
data: {username,password},
success: function (data) {
console.log(data);
if(data.linkid==1){
var i=4;
setInterval(function(){
i--;
if(i==1){
window.location.href="./jqueryReadTxt.html"
}
$("#boxId").html("<p>注册成功"+i+"秒后自动跳转</p>")
},1000)
}else if(data.linkid==0){
$("#boxId").html("<p>注册失败</p>");
}
},
//设置等待效果
//ajax请求数据之前发出的回调
beforeSend(){
$("#boxId").html("<img src='./1.gif'>")
}
});
}
</script>
reg.js
//1.创建服务器
//2.解决跨域
//3.接受前台发来的数据
//4.数据加密
//4.1使用ctypto加密模块来进行内容的加密,使用之前下下载 npm install --save crypto
//4.2向页面中引用
var crypto = require("crypto");
//4.3开始加密
//5.开始往数据库存
var express = require("express");
var app = express();
var mongoose = require("mongoose");
//创建集合
var dbclt = mongoose.model("no1", {
username: String,
userpwd : String
})
app.use(function (req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Headers', 'Content-Type,Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');
res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE,OPTIONS');
next();
})
app.get("/reg", function (req, res) {
//接受数据
var htmluname = req.query.username;
var htmlpwd = req.query.password;
//开始加密
var newhtmlpwd=crypto.createHash("md5").update(htmlpwd).digest("hex");
//开始往数据库存
mongoose.connect("mongodb://localhost:27017/mgd", function (err) {
if (err) {
console.log("数据库连接失败");
} else {
console.log("数据库连接成功");
//创建集合
var user = new dbclt({
username: htmluname,
userpwd:newhtmlpwd
})
//开始存
user.save().then(
(ok)=>{
res.send({
mes:"注册成功",status:200,linkid:1
})
},
(err)=>{
res.send({
mes:"注册失败",status:200,linkid:0
})
}
)
}
})
})
app.listen(3000);