nodejs入门到实战-03-路由和数据库mongodb

6 篇文章 0 订阅
路由
 
前端路由(切换显示内容),后端路由(返回不同的数据或者页面)
 

URL为我指引方向

  • req.url:返回客户端请求的url地址
 
server.js
var http = require('http');
var hostname = '127.0.0.1';
var port = 3000;
var server = http.createServer((req, res) => {
    res.statusCode = 200;
    res.setHeader('Content-Type',  'text/html;charset=utf-8');
    switch (req.url) {
        case '/':
            res.end('helo world.哈哈');
            break;
        case '/about':
            res.end('This is about page.哈哈');
            break;
        case '/home':
            res.end('Welcome to my homepage!');
            break;
        default:
            res.end('NotFound!');
    }
});
server.listen(port, hostname, () => {
    console.log(`Server running at  http://${hostname}:${port}/`);
});
 
 
 
 
思考,网站中很多类似这样的页面或者接口,server.js中的代码会很多,可以考虑把 判断的部分拆分为一个模块
router.js
var router = {
    '/index':function(req,res){
        res.end('helo world. index 哈哈');
    },
    '/about':function(req,res){
        res.end('helo world. about哈哈');
    },
    '/':function(req,res){
        res.end('helo world. index 哈哈');
    },
    '/404':function(req,res){
        res.end('helo world.404   !!!!!   哈哈');
    }
}
module.exports = router;
 
server.js做出更改
const router = require('./router.js');  //加载router模块
const server = http.createServer((req, res) => {
    res.statusCode = 200;
    res.setHeader('Content-Type',  'text/html;charset=utf-8');
    try {
        router[req.url](req, res);
    } catch (error) {
        router['/404'](req, res);
    }
});
 
 

JavaScript 测试和捕捉

try  语句允许我们定义在执行时进行错误测试的代码块。
catch  语句允许我们定义当 try 代码块发生错误时,所执行的代码块。
JavaScript 语句  try    catch  是成对出现的
try
  {
  //在这里运行代码
  }
catch(err)
  {
  //在这里处理错误
  }
catch 块会捕捉到 try 块中的错误,并执行代码来处理它。
 
router.js中 的每个请求返回的内容都是很少字符串
思考,实际开发中都是返回网页或者json数据  
返回一个网页index.html
编写一个index.html页面
将router.js 中  index路由配置修改下,读取index.html 文件,写入请求
'/index':function(req,res){
        //res.end('helo world. index 哈哈');
        fs.readFile('./index.html',function(error,data){
            res.write(data);
            res.end();
        })
    }
    
 
返回json数据  
自己编写一个json文件,返回文件中的数据

MongDB
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。它的特点:高性能、易部署、易使用,存储数据非常方便。
MongoDB术语/概念

 
uploading.4e448015.gif转存失败重新上传取消
mongo和mysql
uploading.4e448015.gif转存失败重新上传取消
一个mongodb中可以建立多个数据库。MongoDB的默认数据库为"db",该数据库存储在data目录中。 MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。
数据库命名:通过标识符,一般是utf-8字符串,不能为空,不能用local/admin/config这三个
 
文档

文档是一个键值(key-value)对
MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。
一个简单的文档例子如下: {"genres": ["犯罪","剧情" ],"title": "肖申克的救赎"}
集合
集合就是 MongoDB 文档组,类似于 RDBMS (关系数据库管理系统:Relational Database Management System)中的表格。
集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。
集合的命名不能是空字符串,也不能出现-,0等,不能以system,$开头
数据类型

uploading.4e448015.gif转存失败重新上传取消
uploading.4e448015.gif转存失败重新上传取消
整形,字符串
安装
windows下安装

一、下载地址
二、命令行下运行 MongoDB 服务器
为了从命令提示符下运行MongoDB服务器,你必须从MongoDB目录的bin目录中执行mongod.exe文件。
 或者将bin目录配置到环境变量path中。
在c盘下创建db文件夹,终端中进入mongo的安装目录的bin下(C:\Program Files\MongoDB\Server\4.0\bin),然后终端中执行下面的命令,就可以启动mongo服务器了
 > mongod --dbpath d:\db\ 
三、控制台中使用mongo(终端中进入mongo的安装目录的bin下)
> mongo
Mac 系统上安装

一、安装 在Mac OS上面安装MongoDB,你可以通过编译源代码来安装 ,也可以在Mac OS上使用Homebrew安装。 这里介绍使用Homebrew安装MongoDB。 首先更新Homebrew的package数据库:
 $ brew update 
$ brew install mongodb
 二、启动MongoDB
 $ mongod --config /usr/local/etc/mongod.conf 
三、在命令行中使用MongoDB 
$ mongo
 
在命令行中mongo的基础指令( 终端中进入mongo的安装目录的bin下

 
show dbs 获取你当前所有的数据库
 use dataBase_name 创建数据库(没有-创建/存在-使用) 
db 指查询你当前的数据库 
db.stats() 查询你当前数据库的状态
 db.dropDatabase() 删除你当前的数据库 
db.help() 查询帮助
 db.version() 获取你当前数据库的版本
 db.collection_name.help() 查询任意集合可以使用方法的帮助
 db.collection_name.find() 查询你当前集合内的信息
使用 use music 创建数据库
创建数据库之后查看并没有出现music,
需要插入一个文档集合album;  
 
文档操作 (CRUD 增删改查) 
 
  •  insert插入   增加数据
db.album.insertOne({‘title’:’xxxx’})
 
插入多条数据
db.album.insertMany([{},{},{}])
 
插入之后可以使用 find()查看 插入的数据
db.album.find();
 
  • 更新    修改数据

 
  • 修改 所有数据 
db.albums.updateMany({},{$set:{artist:‘哈哈’}})
  • db.users.update({age: 25}, {$set: {name: 'changeName'}});
相当于:update users set name = ‘changeName' where age = 25;
 1、修改的数据不存在---第一个参数false(不添加)           true(添加)  
 2、数据有重复的---第二个参数true符合条件的数据均修改,false默认修改第一条数据 
 
 
db.users.update({name: 'Lisi'}, {$inc: {age: 50}}, false, true); 
相当于:update users set age = age + 50 where name = ‘Lisi';
 
 db.users.update({name: 'Lisi'}, {$inc: {age: 50}, $set: {name: 'hoho'}}, false, true); 
相当于:update users set age = age + 50, name = ‘hoho' where name = ‘Lisi'; 
 
 

删除
 
  • 删除   删除数据
// 删除年龄是132
db.users.remove({age: 132});
//删除users中所有数据
db.users.remove({});
 
 
 
常用的文档查询

条件查询
 
查询所有记录db.userInfo.find(); 相当于:select* from userInfo;
 查询去重后数据 db.userInfo.distinct("name"); 相当于:select distict name from userInfo; 
 
查询age = 22的记录 db.userInfo.find({"age": 22}); 相当于: select * from userInfo where age = 22; 
查询age > 22的记录 db.userInfo.find({age: {$gt: 22}}); 相当于:select * from userInfo where age >22;
 查询age < 22的记录 db.userInfo.find({age: {$lt: 22}}); 相当于:select * from userInfo where age <22;
查询age >= 25的记录 db.userInfo.find({age: {$gte: 25}}); 相当于:select * from userInfo where age >= 25; 
查询age <= 25的记录 db.userInfo.find({age: {$lte: 25}}); 
查询age >= 23 并且 age <= 26   db.userInfo.find({age: {$gte: 23, $lte: 26}}); 
 
模糊查询
查询name中包含 mongo的数据 db.userInfo.find({name: /mongo/}); //相当于%% select * from userInfo where name like ‘%mongo%’; 
查询name中以mongo开头的 db.userInfo.find({name: /^mongo/}); select * from userInfo where name like ‘mongo%’;
 
查询指定列
查询指定列name、age数据 db.userInfo.find({}, {name: 1, age: 1}); 相当于:select name, age from userInfo; 
查询指定列name、age数据, age > 25 db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1}); 相当于:select name, age from userInfo where age >25;
 
排序
 按照年龄排序 升序:
db.userInfo.find().sort({age: 1}); 
降序:db.userInfo.find().sort({age: -1});
 
并且
 查询name = zhangsan, age = 22的数据
 db.userInfo.find({name: 'zhangsan', age: 22});
 相当于:select * from userInfo where name = ‘zhangsan' and age = ’22';
 
或者
 db.userInfo.find({$or: [{age: 22}, {age: 25}]}); 
相当于:select * from userInfo where age = 22 or age = 25; 
 
 查询前5条数据 db.userInfo.find().limit(5); 相当于:select top 5 * from userInfo;
 
 
查询10条以后的数据
db.userInfo.find().skip(10); 
相当于:select * from userInfo where id not in (    select top 10 * from userInfo ); 
 
限制数据量/几条数据后 
db.userInfo.find().limit(10).skip(5); 
 
 
 
查询第一条数据 
db.userInfo.findOne(); 
相当于:select top 1 * from userInfo;   db.userInfo.find().limit(1);
 
 
 查询某个结果集的记录条数
 db.userInfo.find({age: {$gte: 25}}).count(); 
相当于:select count(*) from userInfo where age >= 20;
 
查询某一项的记录数目
db.userInfo.find({sex: {$exists: true}}).count();
 相当于:select count(sex) from userInfo;

 
 
在js 中操作 mongodb
 
1.创建项目
    使用  npm init  命令 在项目下创建package.json文件
 
2.本地安装mongodb
npm i monggodb -D
 
创建一个js文件写入下面代码
//要在 MongoDB 中创建一个数据库,
//首先我们需要创建一个 MongoClient 对象,然后配置好指定的  URL 和 端口号。
//
//如果数据库不存在,MongoDB 将创建数据库并建立连接
//连接数据库,创建集合
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost:27017/';
var dbname  = 'test';
MongoClient.connect(url, function (err, db) {
    if (err) throw err;
    console.log('连接上数据库服务器');
    //选中要连接的数据库
    var dbase = db.db(dbname);
    //创建表
    dbase.createCollection('site', function (err, res) {
        if (err) throw err;
        console.log("创建集合!");
        db.close();
    });
});
 
//与 MySQL 不同的是 MongoDB 会自动创建数据库和集合,所以使用前我们不需要手动去创建。
插入(增加)数据 
//插入数据
//向user表中插入数据
MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db(dbname);
    var myobj = { username: "zs", password: "123" };
    dbo.collection("user").insertOne(myobj, function(err,  res) {
        if (err) throw err;
        console.log("文档插入成功");
//插入的数据产生的结果
        console.log(res])
        db.close();
    });
});
 
插入多条数据
 
//插入多条数据
MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db(dbname);
    var myobj =  [
        { username: 'lisi', password: '1111', type: '1'},
        { username: 'wangwu', password: '222', type: '2'}
       ];
    dbo.collection("user").insertMany(myobj,  function(err, res) {
        if (err) throw err;
        console.log("插入的文档数量为: " +  res.insertedCount);
        
        console.log(res)
        db.close();
    });
});
 
 
查询数据
//查询数据
//可以使用 find() 来查找数据, find() 可以返回匹配条件的所有数据。
//如果未指定条件,find() 返回集合中的所有数据。
MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db(dbname);
    dbo.collection("user").  find({}).toArray(function(err, result) { // 返回集合中所有数据
        if (err) throw err;
        console.log('查询成功'+result.length);//结果为数组
        db.close();
    });
});
 
查询指定条件
//查询指定条件的数据
//查询用户名为 lisi的用户
MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db(dbname);
     var whereStr = {"username":'lisi'};  // 查询条件
     dbo.collection("user").find(whereStr).toArray(function(err, result) {
        if (err) throw err;
        console.log('查询lisi成功'+result);
        db.close();
    });
});
 
 
 
更新数据
 
//更新一条数据
MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db(dbname);
    var whereStr = {"username":'lisi'};  // 查询条件
    var updateStr = {$set: { "password" : "test" }};
    dbo.collection("user").updateOne(whereStr, updateStr,  function(err, res) {
        if (err) throw err;
        console.log("文档更新成功");
        db.close();
    });
});
// 更新多条数据
MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db(dbname);
    var whereStr = {"username":'lisi'};  // 查询条件
    var updateStr = {$set: { "password" : "test222" }};
    dbo.collection("user").updateMany(whereStr,  updateStr, function(err, res) {
        if (err) throw err;
        console.log("文档更新成功");
        console.log('插入多条成功 ,'+res.result.nModified  + " 条文档被更新");
        db.close();
    });
});
 
排序
 
//排序 使用 sort() 方法,该方法接受一个参数,规定是升序(1)还是降序(-1)。
//{ _id: 1 }  // 按 _id 字段升序
//{ _id: -1 } // 按 _id 字段降序
MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db(dbname);
    var mysort = { _id: 1 };
     dbo.collection("user").find().sort(mysort).toArray(function(err, result) {
        if (err) throw err;
        console.log(result);
        db.close();
    });
});
 
 
查询分页
 
//如果要设置指定的返回条数可以使用 limit() 方法,该方法只接受一个参数,
//指定了返回的条数。
 
// limit():读取两条数据
MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db(dbname);
     dbo.collection("user").find().limit(2).toArray(function(err, result) {
        if (err) throw err;
        console.log(result);
        db.close();
  });
});
//如果要指定跳过的条数,可以使用 skip() 方法。
//skip(): 跳过前面两条数据,读取两条数据
MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db(dbname);
     dbo.collection("user").find().skip(2).limit(2).toArray(function(err, result) {
        if (err) throw err;
        console.log(result);
        db.close();
  });
});
 
 
 
 
 
 
 

 

 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值