MongoDB+Express
75710 ワード
データベースの概念のデータベースソフトウェアには複数のデータ倉庫が含まれてもよく、各データ倉庫には複数のデータセットが含まれてもよく、各データセットには複数の文書(具体的なデータ) が含まれてもよい.
専門用語
説明する
database
データベース、monogoDBデータベースソフトウェアで複数のデータベースを構築することができます.
コレクション
セット、データのセットは、JavaScriptの配列として理解されます.
document
ドキュメント、データのデータは、JavaScriptのオブジェクトとして理解できます.
field
フィールド、ドキュメント内の属性名は、JavaScriptのオブジェクト属性として理解できます.
モングDB.node.jsでMongoDBデータベースを操作するにはnode.jsの第三者に依頼する必要があります. を起動する.コマンドラインツールで に接続できません.は、mongodbにデータベースの作成を表示する必要がありません.使用中のデータベースが存在しない場合、mongodbは自動的に を作成します.
MongoDB操作(添削・修正)
セットを作成のセットを作成するには、セット設定規則に応じて、20のセットを作成し、モングース.Schemaアーキテクチャ関数の例を作成すると、セット を作成することができます.ドキュメントを作成すると、実際にはセットにデータを挿入します. セット例 を作成する.インスタンスオブジェクトのsave方法を呼び出して、データをデータベースに保存する方法1 .
mongodbデータベースのインストールディレクトリを見つけて、インストールディレクトリの下のbinディレクトリを環境変数に配置します.
クエリードキュメント
すべての文書を検索は、必要に応じた第1の文書 だけを返す.でセットルールを作成すると、現在のフィールドの検証ルールを設定できます.認証に失敗したら挿入失敗 を入力します. です. です. です. です. を除去する. 集合関連は、一般的に異なるセットのデータ間に関連があり、例えば、文章情報とユーザ情報は異なるセットに格納されているが、記事はあるユーザが発表したものであり、記事を検索するためのすべての情報は、発表ユーザを含む.集合関連付けが必要である. は、idを使用して、集合を関連付ける . poputlate方法を用いて関連セットクエリ を行う.
コマンドラインツールに は、 を導入する.テンプレートエンジンに頼るべきデータとテンプレートはどこにあるか教えてください. テンプレート文法を使用して、テンプレートとデータをテンプレートエンジンに教えます. 変数をテンプレートに導入する テンプレートルートディレクトリ を設定します.テンプレートのデフォルトの拡張子 を設定します.
Express expressはnodeプラットフォームのwebアプリケーション開発の枠組みに基づいています.一連の強力な特性を提供しています.様々なWebアプリケーションを作成するのに役立ちます. は、簡単なルーティング定義方式 を提供する.は、HTTP要求パラメータの取得を簡略化処理した を実行する.テンプレートエンジンに対するサポートが高く、ダイナミックHTMLページ をレンダリングしやすい.は、中間部品機構の効果的な制御HTTP要求 を提供する.大量の第三中間部品を持っています.機能を拡張します. ミドルウェアは、クライアントからの要求を受信し、要求に応答しても良いし、要求を次のミドルウェアに引き継いで処理しても良いです. ミドルウェアは主に二つの部分から構成され、ミドルウェア方法及び要求処理関数 中間価格法はexpressによって提供され、ブロック要求を担当し、処理関数は開発者に提供され、処理要求 を担当する.
は、同じ要求に対して複数の中間部品を設定し、同じ要求に対して複数の処理を行うことができる .デフォルトの場合、要求は上から下へ順にミドルウェアにマッチングし、マッチングが成功すると、マッチングが終了する. は、next方法を呼び出して、要求された制御権を次の中間件に渡すことができ、直接に終了要求の中間件 に遭遇する. . を表す.ルート保護は、クライアントがログインしたいページにアクセスする際に、まず中間部品を使ってユーザ登録状態を判断することができ、ユーザがログインしていない場合はブロック要求に直接応答し、ログインしたいインターフェース にユーザが入ることを禁止する.ウェブサイトのメンテナンス公告は、すべてのルートの一番上に、すべての要求を受信する中間部品を定義し、直接にクライアントに応答して、ウェブサイトはメンテナンス中です. カスタム404ページエラー処理ミドル プログラム実行中、ファイルの読み込みに失敗したなど、予期せぬエラーが発生することは避けられない.データベース接続失敗 .エラー処理ミドルウェアはエラーを集中的に処理するところです. プログラムにエラーが発生したら、next()メソッドを呼び出し、エラー情報をパラメータ形式でnext()メソッドに渡すと、エラー処理ミドル をトリガすることができます. node.jsにおいて、非同期APIのエラー情報はすべてコールバック関数で取得され、Promiseオブジェクトをサポートする非同期APIにエラーが発生した場合、catch方式で を捕捉することができる. try catchは、非同期関数および他の同期コードの実行中に発生するエラーをキャプチャすることができるが、他のタイプのAPIによって発生するエラー を捕捉することができない. Expressフレームでは に戻る.は、Expressによって内蔵された
express-art-templateテンプレートエンジン art-templateテンプレートエンジンをより良いExpressフレームと組み合わせるために、テンプレートエンジンの公式は、元のart-templateテンプレートエンジンに基づいて、express-art-template を実装しました.は を使用する.は、すべてのテンプレートから までの変数をap.localオブジェクトの下に設定します.
専門用語
説明する
database
データベース、monogoDBデータベースソフトウェアで複数のデータベースを構築することができます.
コレクション
セット、データのセットは、JavaScriptの配列として理解されます.
document
ドキュメント、データのデータは、JavaScriptのオブジェクトとして理解できます.
field
フィールド、ドキュメント内の属性名は、JavaScriptのオブジェクト属性として理解できます.
モングDB
npm install mongoose
コマンドでWindowsをダウンロードし、MongoDB net start mongoDB
を実行すると、モンゴルDBが起動されます.そうでないと、モンゴルDBはデータベース接続const mongoose = require('mongoose')
mongoose.connect('moongodb://localhost/playground')
.then(()=>{
console.log('success')})
.catch(err=>console.log('fail', err))
データベースの作成MongoDB操作(添削・修正)
セットを作成
//
const courseSchema = new mongoose.Schema({
name: String,
author: String,
isPublish: Boolean
})
//
const Course = mongoose.model('Course', courseSchema) // courses
文書を作成//
const course = new Course({
name:'Node.js course',
author: 'Billy',
isPublish: true
})
//
course.save()
方法2Course.create({
name:'JavaScript ',
author:'Billy',
isPublish: true
},(err, doc)=>{
//
console.log(err)
//
console.log(doc)
})
---------------------------
Course.create({
name:'JavaScript ',
author:'Billy',
isPublish: true
})
.then(doc=>console.log(doc))
.catch(err=>console.log(err))
monogoDBデータベース導入データmongoimport -d -c --file
クエリードキュメント
すべての文書を検索
//
Course.find().then(result=>console.log(result))
//
[{
},{
}]
文書を検索//
Course.findOne({
name:'JavaScript '})
.then(res=>console.log(res))
//
{
}
あいまい検索//
User.find({
age:{
$gt:20, $lt:50}}).then(res=>console.log(res))
//
User.find({
hobbies: {
$in: [' ']}}).then(res=>console.log(res))
//
User.find().select('name email').then(res=>console.log(res))
//
User.find().sort('age').then(res=>console.log(res))
// skip limit
User.find().skip(2).limit(2).then(res=>console.log(res))
文書を削除//
Course.findOneAndDelete({
}).then(res=>console.log(res))
//
Course.deleteMany({
}).then(res=>console.log(res))
文書を更新//
User.updateOne({
}, {
}).then(res=>console.log(res))
//
User.updateMany({
},{
}).then(res=>console.log(res))
モングース検証required:true
必須転送フィールドminlength:3
文字列の最大長さは2 maxlength:20
文字列の最大長さは20 min:2
値は最小で2 max:100
数値は最大100 enum:['html','css','javascript','node.js']
列挙(列挙されたデータのみ入力可能)trim:true
は、文字列の両側のスペースvalidate
:カスタムベリファイアdefault
:デフォルト値取得エラー情報:error.errors[フィールド名].message //
const User = mongoose.model('User', new mongoose.Schema({
name: {
type: String
}
}))
//
const Post = mongoose.model('Post', new mongoose.Schema({
title: {
type: String
}
// id
author:{
type:mongoose.Schema.Types.ObjectId, ref:'User'}
}))
//
Post.find().populate('author').then((err, result)=>console.log(result))
テンプレートエンジンnpm install art-template
コマンドを使用してダウンロードするconst template = require('art-template')
を使用してテンプレートエンジン//
const template = require('art-template')
//
const html = template('./views/index.art', {
data: {
name:' ',
age: 20
}
})
<div>
<span>{
{ data.name }}span>
<span>{
{ data.age }}span>
div>
テンプレート文法
<h2>{
{value}}h2>
<h2>{
{a?b:c}}h2>
<h2>{
{ a + b}}h2>
<h2>h2>
<h2>h2>
<h2>h2>
原文出力
<h2>{
{ @ value }}h2>
<h2>h2>
条件の判断
{
{if }}.......{
{/if}}
{
{if v1}}....{
{else if v2}}....{
{/if}}
...
... ...
ループ
{
{ each target }}
{
{ $index }} {
{$value}}
{
{ /each }}
サブテンプレート<!-- -->
{
{
include './header.art' }}
<!-- -->
<% include('./header.art') %>
テンプレートの継承<html lang="en">
<head>
<meta charset="UTF-8">
<title>Documenttitle>
{
{blcok 'head'}}
{
{/blcok}}
head>
<body>
{
{block 'content'}}
{
{/block}}
body>
html>
{
{extend './layout.art'}}
{
{blcok 'head'}}
<link rel="stylesheet" href="index.css">
{
{/blcok}}
{
{blcok 'content'}}
<p>this is the contentp>
{
{/blcok}}
テンプレートの設定const html = template( ', ')
template.defaults.imports. =
template.defaults.root =
Express
template.defaults.extname= '.art'
コマンドを使用してexpressフレーム特性をダウンロードする// express
const express = require('express')
// web
const app = express();
// get
app.get('/', (req, res)=>{
//
res.send('Hello Express')
})
// 3000
app.listen(3000)
-------------------------
// express
const express = require("express");
//
const app = express();
app.get("/", (req, res) => {
// send
// send http ;
// send ;
res.send({
name: "Billy", age: 19 });
});
//
app.listen(3000);
console.log(" ");
中間部品app.get(' ', ' ') // get
app.post(' ', ' ') // post
app.get('/request', (req, res, next)=>{
req.name - 'zhangsan',
next()
})
app.get('/request', (req, res)=>{
res.send(req.name)
})
app.useの中間部品の使い方npm install express
は、すべての要求方式に一致し、要求処理関数に直接に入ってきてもよく、すべての要求を受信することを表すapp.use((req, res, next)=>{
console.log(req.url)
next()
})
app.use
の最初のパラメータは、要求アドレスにも入ることができ、どのような要求方法であれ、この要求アドレスであれば、この要求を受信するapp.use('/admin', (req, res, next)=>{
console.log(req.url)
next()
})
// express
const express = require("express");
//
const app = express();
app.use((req, res, next) => {
console.log(" app.use ");
next();
});
app.use("/request", (req, res, next) => {
console.log(" app.use /request ");
next();
});
app.get("/list", (req, res, next) => {
req.name = " ";
next();
});
app.get("/request", (req, res) => {
res.send(req.name);
});
//
app.listen(3000);
console.log(" ");
中間部品の応用app.use((err, req, res, next)=>{
res.status(500).send(' ')
})
-----------------
// express
const express = require("express");
//
const app = express();
// app.use((req, res, next) => {
// res.send(" ");
// });
app.use("/admin", (req, res, next) => {
let isLOgin = true;
if (isLOgin) {
next();
} else {
res.send(" ");
}
});
app.get("/admin", (req, res) => {
res.send(" ");
});
app.use((req, res, next) => {
// res.status(404);
res.status(404).send("404");
});
//
app.listen(3000);
console.log(" ");
app.get('/', (req, res, next)=>{
fs.readFile('/file-docs-not-exist', (err, data)=>{
if(err){
next(err)
}
})
})
捕獲エラーapp.get('/', async (req, res, next)=>{
try {
await User.find({
name:' '})
}catch(ex){
next(ex)
}
})
モジュール化ルート// home.js
const home = express.Router()
home.get('/index', ()=>{
res.send('welcome')
})
module.exports = home
// app.js
const home = require('./route/home')
app.use('/home', home)
GETパラメータの取得app.use
を使用してGETパラメータを取得でき、フレーム内ではGETパラメータをオブジェクトに変換して// http://localhost:3000/?name=zhangsan
app.get('/', (req, res)=>{
console.log(req.query) //{"name":"zhangsan"}
})
POSTパラメータの取得// body-parse
const bodyParse = require('body-parse')
// body-parse
app.use(bodyParse.urlencoded({
extended: false}))
//
app.post('/add', (req, res)=>{
//
console.log(req.body)
})
----------------------------
const express = require("express");
const bodyParse = require("body-parser");
const app = express();
// extended:false queryString
// extended:true qs
app.use(bodyParse.urlencoded({
extended: false }));
app.post("/index", (req, res) => {
console.log(bodyParse);
// body bodyParse req , post
res.send(req.body);
});
app.listen(3000);
Expressルーティングパラメータ// http://localhost:3000/find/123
app.get('./find/:id', (req, res)=>{
console.log(req.params) // {id: 123}
})
------------------------
const express = require("express");
const bodyParse = require("body-parser");
const app = express();
app.get("/index/:id/:name/:age", (req, res) => {
//
res.send(req.params);
});
app.listen(3000);
静的リソース処理req.query
によって、静的ファイルを簡単に管理することができ、例えば:img、CSS、JavaScriptファイルapp.use(express.static('public'))
このように設定してから、publicディレクトリの下の公共静的資源ファイルにアクセスすることができます.express-art-templateテンプレートエンジン
express.static
// art , express-art-template
app.engine('art', require('express-art-template'))
//
app.set('views', path.join(__dirname, 'views'))
// , art
app.set('view engine', 'art')
app.get('/', (req, res)=>{
//
res.render('index')
})
-------------------------------------
const express = require("express");
const path = require("path");
const app = express();
// express
//
//
app.engine("art", require("express-art-template"));
// express ('views')
app.set("views", path.join(__dirname, "views"));
// express
app.set("view engine", "art");
app.get("/index", (req, res) => {
// res.render("index.art");
//
//
//
//
res.render("index", {
msg: "message",
});
});
app.listen(3000);
app.locarsオブジェクトapp.locals.users = [{
name: ' ',
age: 20
},{
name:' ',
age: 40
}]