ルーティング
どこフロントエンドのために行く場所を伝え、主に、子サービスとして理解することができるバックエンドのために行くをブラウザに伝えるために指向、ルートは少しサービス(サーバー/アプリ)、インタフェースの処理であります
構成と使用方法
/routes/xx.js
// 1. 创建路由
let router = express.Router();
//2 路由处理响应
router.响应API(地址, 处理函数)
//3. 导出路由
module.exports = router;
メインサービスを/app.js
//安装路由
app.use('地址',router);
/routes/xx.js
//字路由里安装路由 嵌套
router.use('地址',子router) //需要next 延续
//截获当前路由下的部分公共业务
router.all('*',当前router路由下的验证工作) //需要next 延续
サブルートのルートのアドレスに対応するメインルート
以下のような:app.js:
/api/user
~~ user.jsの:/
以下のような:app.js:
/api/user/add
~~ user.jsの:/add
例:
const express = require("express")
const app = express()
app.listen(3000)
app.all("*",(req,res,next)=>{
req.title = "index.js"
next()
})
//app.get("/api/a",require("./routes/a.js")) 报错了!
//主入口上面通过安装路由
// app.use('地址',router);
app.use("/api/a",require("./routes/a.js"))
app.get("/reg",(req,res)=>{
console.log("reg===>",req.title)
res.end()
})
// app.get("/api/a/b",(req,res)=>{
// console.log("这是index.js文件里面的/api/a/b哦....")
// res.end()
// })
// app.get("/api/a/c",(req,res)=>{ //30行 返回json数据 前端
// console.log("这是index.js文件里面的/api/a/c哦....")
// res.end()
// })
a.js:
// 1. 创建路由
let express = require("express")
let router = express.Router();
router.all("*",(req,res,next)=>{
req.title = "a.js"
console.log("-----进入a.js里面的all方法了-------")
next()
})
//2 路由处理响应
// router.响应API(地址, 处理函数)
router.get("/",(req,res,next)=>{
console.log("这是a.js文件里面的/api/a哦....")
res.end()
})
//通过router.use方法来去注册子路由
//当我们浏览器访问/api/a/b的时候就会进入b.js里面的/所对应的回调函数
router.use("/b",require("./b.js"))
// /api/a/c
router.get("/c",(req,res)=>{ //30行 返回json数据 前端
console.log("这是a.js文件里面的/api/a/c哦....",req.title)
res.end()
})
//3. 导出路由
module.exports = router;
b.js
let express = require("express")
//创建路由
let router = express.Router()
//可以通过router.all方法实现公共业务抽离
router.all("*",(req,res,next)=>{
req.title = "b.js文件"
console.log("-----被b.js里面的all方法拦截了哦----")
next()
})
//路由的响应处理
router.get("/",(req,res,next)=>{
console.log("这是b.js文件里面的/api/a/b哦....",req.title)
res.end()
})
// /api/a/b/b1-1
router.get("/b1-1",(req,res,next)=>{
console.log("这是b.js文件里面的/api/a/b/b1-1哦....",req.title)
res.end()
})
router.get("/b1-2",(req,res,next)=>{
console.log("这是b.js文件里面的/api/a/b/b1-2哦....",req.title)
res.end()
})
//暴露路由
module.exports = router
データベース
mysqlの
リレーショナルデータベース、2次元の表は、子テーブルは存在しません。
SQL文
データベースの構築
CREATE DATABASE `2017-12-6` DEFAULT CHARACTER SET armscii8 COLLATE armscii8_general_ci;
テーブルを作成するには
CREATE TABLE `2020-12-6`.`user` (
`name` VARCHAR( 32 ) NOT NULL ,
`age` INT( 3 ) NOT NULL ,
`address` VARCHAR( 128 ) NOT NULL
) ENGINE = INNODB
増加
INSERT INTO 表 (字段列表) VALUES(值列表)
INSERT INTO user (name,age,address) VALUES('苏菲',38,'')
[削除]
DELETE FROM 表 WHERE 字段名=值
DELETE FROM user WHERE name='alex'
変更
UPDATE 表 SET 字段名=值 WHERE 字段名=值
UPDATE user set name='sufei' WHERE name='苏菲'
検索
SELECT ? FROM 表
SELECT * FROM user 查所有
例:
//1引入mysql客户端的包
var mysql = require("mysql")
var express = require("express")
var app = express()
app.listen(3000)
//2创建库的链接
var connection = mysql.createConnection({
host : 'localhost', //mysql的服务器地址
user : 'root', //用户名
password : 'root', //密码
database : '2020-03-13' //数据库名
});
//3链接
connection.connect()
//插入
// let str1 = "INSERT INTO user (name,age,address) VALUES('李四',18,'中国湖北')"
//修改
// let str2 = `UPDATE user set name='lisi' WHERE name='李四'`
//删除
// let str3 = `DELETE FROM user WHERE name='sufei'`
//4查询
let str4 = `SELECT * FROM user`
//表相关的操作
// connection.query('sql语句', function (error, results, fields) {})
// app.get("/api/user",(req,res,next)=>{
// connection.query(str4, function (error, results, fields) {
// // console.log("error",error)
// // console.log("results",results)
// // console.log("fields",fields)
// res.send({err:0,data:results})
// //5关闭库
// connection.end();
// })
// })
MongoDBの
NoSQL、キャッシュ・タイプとして知られている非リレーショナル・データベース、マルチユース・シナリオでは、データの複数種類の大規模なデータ収集を解決するために
-
コンフィギュレーションデータファイルの保存場所:
インストールディレクトリを検索\サーバー\ 4.0 \ binに\ - >入力してCMD - >入力のmongod - >のmongod --dbpath C:\データ\デシベル
手動で作成するデータとdbディレクトリ
- サーバーの開始:オプション
インストールディレクトリ\サーバー\ 4.0を探す\ binに\ - > cmdと入力 - >入力のmongod
一般的には、デフォルトの起動を開きます。
- クライアントの開始:
インストールディレクトリ\サーバー\ 4.0 \ binが\検索 - >入力してCMD - >入力しモンゴ
- 環境変数オプション
任意の文字の上に行くためにのmongodサーバーを起動することができます|モンゴクライアント、インストールディレクトリに環境変数を追加
MongoDBの対mysqlの
mysqlの | MongoDBの | |
---|---|---|
データベース(ライブラリ) | データベース(ライブラリ) | |
表(表) | コレクション(コレクション) | |
行(データ) | ドキュメント(文書) | |
列(フィールド) | フィールド(面積) | |
二次元の表は、それぞれの時間は、ディスクに保存しました | JSON、キャッシュされた、あなたの近くにディスクに保存 | ストレージ |
MongoDBのコマンドライン操作の宣言型| obj.api()
ライブラリの操作
查: show dbs
db 查看当前库
建: use 库名 没有建,有就切换
删: db.dropDatabase() 删除当前库
セット(テーブル)の操作
建:db.createCollection('表名',{配置})
//配置:{size:文件大小,capped:true,max:条数|文档数} capped定量
//db.表(集合).isCapped() 返回 true/false 是否是定量
查:show collections / db.getCollectionNames()
删:db.表|集合.drop()
文書(行)動作
増加
db.集合.save({}) //添加一条
db.集合.insert({}) //添加一条
db.insertOne({}) //添加一条
db.集合.save([{},{}]) //多条
db.集合.insert([{},{}]) //多条
//insert 不会替换相同ID save会
[削除]
db.集合.deleteOne({要删数据条件描述}) //一条
db.集合.remove({},true) //一条
db.集合.remove({要删数据条件描述}) //多条
db.集合.remove({}) //清空表
変更
db.集合.udpate({查询条件},{替换条件},插入boolean,全替换boolean)
質問
{年齢:22歳} == 22
{年齢:{ KaTeX解析エラー:予想'EOF'、得'}' 6位の:GT:22}}年齢> 22 {... LT:22}}年齢<22
{年齢:{ KaTeX解析エラー: 'EOF'期待、だ'}'、7位の:GTE:22}}年齢> = 22 {AG ... LTE:22}}年齢<= 22
{年齢:{ GTE:22}}年齢<= 122 &&年齢> = 22
{$または:[{年齢:22}、{年齢:122}]} 22または122
{キー:値、KEY2、値2}値&&値2
{名:/正则/}条件を交換してください
{ incがある:{年齢:}} 1。
検索
所有:db.集合.find(条件)
条数: db.集合.find().count()
去重:db.集合.distinct(key)
db.集合.find({条件},{指定要显示列区域})
列の表示領域を指定します
ユーザ名:1つの表示このエリアは、他の人が表示されません
ユーザ名:0このエリアは表示されません、他のディスプレイ
_idは、デフォルトの表示です
行
db.集合.find().sort({key:1,key2:-1}) //升
db.集合.find().sort({key:-1}) //降
限定
db.集合.find().limit(number) //限定
db.集合.find().skip(number) //跳过
db.集合.findOne()//找第一个
db.集合.find().limit(1) //查询第一条