路由
前端路由(切换显示内容),后端路由(返回不同的数据或者页面)
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术语/概念
mongo和mysql
一个mongodb中可以建立多个数据库。MongoDB的默认数据库为"db",该数据库存储在data目录中。 MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。
数据库命名:通过标识符,一般是utf-8字符串,不能为空,不能用local/admin/config这三个
文档
文档是一个键值(key-value)对
MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。
一个简单的文档例子如下: {"genres": ["犯罪","剧情" ],"title": "肖申克的救赎"}
集合
集合就是 MongoDB 文档组,类似于 RDBMS (关系数据库管理系统:Relational Database Management System)中的表格。
集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。
集合的命名不能是空字符串,也不能出现-,0等,不能以system,$开头
数据类型
整形,字符串
安装
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();
});
});