express是node.js的一个框架 在他的基础之上还有一个koa 框架;
mongodb是一个非关系型数据库;
这次要做的是使用 node.js的mongoose模块 来链接 和操作mongodb;
安装 express
npm i express --save
根目录创建server文件夹,放置后台文件---》在文件夹内创建 server.js;
在 文件内 书写 :
const express= require("express"); //引入express
const app=express(); // 调用express生成方法
app.get("/",function (req,res) {
res.send("<h1>hello world</h1>") //app.get的send方法,输出一段文本;访问 的是 :“/” 根目录
})
app.get("/data",function (req,res) {
res.json({"name":"json"}) // app.get 的 json方法 ,输出json数组 访问的是 :“/data” data目录
})
app.listen(9093,function () {
console.log("node start") // app.listen 方法 监听 9093 端口
})
以上的的代码 cd到server 文件夹 然后 在 输入node server.js 回车
这样就会执行这段node代码
首先执行 listen 的语句 在下方能看到 listen方法里的打印的东西 ,
然后在浏览器访问 localhost:9093 就可以得到输出的一个html标签---helloworld
localhost:9093/data 得到一个json字符串 {"name","json"} 一般这种用法会比较常见 ;
这样的输出 每次更改 都需要ctrl+c停掉 ,然后重新 node server.js 来重新启动;
我们可以选择全局安装一个 辅助的热更新的工具
npm i -g nodemon
我发现 mac在全局安装的时候 需要输入密码,否则没权限报错; 局部安装好像是不用输入密码的;
那么就是sudo npm i -g nodemon ,就这样 输入密码完成安装;
然后 nodemon server.js 执行 命令 热更新;
mongodb的安装
window 安装 比较简单
linux 安装不会
仅仅说下 mac的安装
首先 你的去安装mac的包管理工具---- brew (酿);我这边下载的是homebrew(感谢王总的赞助帮我装上了);
然后 底下输入命令 brew install mongodb
等 homebrew 自己更下一下 就可以正常下载了
然后输入 mongod --config /usr/local/etc/mongod.conf 执行就可以跑起来了
新开一个任务窗口 ,然后输入mongo
可以得到下面的信息
MongoDB shell version v3.6.5
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.5
Server has startup warnings:
2018-06-12T15:34:39.440+0800 I CONTROL [initandlisten]
2018-06-12T15:34:39.440+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2018-06-12T15:34:39.441+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2018-06-12T15:34:39.441+0800 I CONTROL [initandlisten]
>
这样就算是启动成功;
第二行url 就是mongodb的输出的端口;
然后就利用 mongoose 来把node和 mongodb的连接起来
安装 mongoose
npm i mongoose --save
安装成功后打开 server.js来修改
const express= require("express");
const mongoose=require('mongoose'); //引入mongoose 工具
const DB_URL="mongodb://127.0.0.1:27017"; // 拿到 mongodb的输出端口
mongoose.connect(DB_URL); //使用mongoose链接到 mongodb的端口
mongoose.connection.on("connected",function () {
console.log("connect successful"); //链接成功以后输出 字符串
})
const app=express();
app.get("/",function (req,res) {
res.send("<h1>hello world</h1>")
})
app.get("/data",function (req,res) {
res.json({"name":"json"})
})
app.listen(9093,function () {
console.log("node start")
})
这样进入目录下启动 nodemon server.js 就会输出 链接成功的字符串 ;
定义mongodb的文档模型
Schema 和model
const express= require("express");
const mongoose=require('mongoose');
const DB_URL="mongodb://127.0.0.1:27017";
mongoose.connect(DB_URL);
mongoose.connection.on("connected",function () {
console.log("connect successful");
})
//mongodb 里有文档,字段的概念
const User=mongoose.model("user",new mongoose.Schema({
user:{type:String,require:true},
age:{type:Number,require:true}
})
)
const app=express();
app.get("/",function (req,res) {
res.send("<h1>hello world</h1>")
})
app.get("/data",function (req,res) {
res.json({"name":"json"})
})
app.listen(9093,function () {
console.log("node start")
})
mongodb 里有文档和字段的概念
利用 mongoose的
增 create
删 remove
改 update
查 Find和findOne
首先来尝试新增数据
//新增数据
User.create({name:"xiaoming",age:18},function (err,doc) {
if(!err){
console.log(doc)
}else{
console.log(err);
}
})
node里的异步操作回调函数的参数一般的都是(err,doc)
第一个参数是错误信息;第二个就是正常输出了;
如果创建成功会看到控制台 打印
{ _id: 5b1f842859321604ac198892,
user: 'xiaoming',
age: 18,
__v: 0 }
查
然后执行查的操作
上面执行增加的代码先注掉;
然后在/data代码里操作
app.get("/data",function (req,res) {
User.find({},function (err,doc) {
res.json(doc);
})
})
第一个参数空对象 ,就是查全部的操作;
然后json格式输出;得到
[{"_id":"5b1f82720de0de04a2c5c680","age":18,"__v":0},
{"_id":"5b1f842859321604ac198892","user":"xiaoming","age":18,"__v":0},{"_id":"5b1f84a446aa8e04b0929e90","user":"xiaoming","age":18,"__v":0},{"_id":"5b1f84da96a5ea04b4cc1337","user":"xiaoming","age":18,"__v":0},{"_id":"5b1f84e725e6b504b7757326","user":"xiaoming","age":18,"__v":0},{"_id":"5b1f84f7d7982504ba25b055","user":"xiaoming","age":18,"__v":0}]
执行删除的操作
把age=18的全部删除
//删除数据
User.remove({age:18},function (err,doc) {
console.log(doc)
})
第一个参数 是过滤对象
成功以后 会看到
{ n: 6, ok: 1 }
说明删除掉6条数据;;;;;
再插入两条数据方便进行改的操作;
//修改数据
User.update({user:"xiaoming"},{$set:{age:30}},function (err,doc) {
console.log(doc);
})
第一个参数 是过滤对象 ,第二个参数的$set:{}里就是要设置的属性;
返回{ n: 1, nModified: 1, ok: 1 }说明修改成功;
最后补充一下查的操作
app.get("/data",function (req,res) {
User.find({user:“xiaoming”},function (err,doc) {
res.json(doc);
})
})
在finde的过滤对象里 写入
user:“xiaoming”
然后输出就只剩下小明的的数据了
还有一个findOne 如果有多条数据 那么查找到一条就返回,;只是一个对象,不是find的数组;