序文
最近、Web開発の学習が少し面倒になりました。Web開発のすべての部分を理解しました。Web開発について一定の考えがあります。ここで、過去2日間のNodejsのExpressフレームワークでのミドルウェアの使用法を要約します。
ミドルウェアは、クライアントからの要求を受け入れたり、要求に応答したり、処理のために次のミドルウェアに要求を渡したりできる一連のメソッドです。特に、リクエストを処理するためのリクエストを受け入れるために使用されます。
ミドルウェアは複雑な要求を分離でき、要求に対していくつかの検証を行うこともできます。
Web開発コラムの過去のレビュー:
- htmlタグ、特殊文字
- HTMLヘッドタグの一般的なタグと属性
- htmlスーパー/アンカーリンクと機能リンク
- CSSスタイルの書き方
- CSS実際のプロジェクト装飾登録ページ
- jsログインインターフェースは完璧です-フォーム検証
Expressフレームワークのダウンロードについては、npmを使用して直接ダウンロードできます。Expressフレームワークの詳細については、Expressの公式ドキュメントを確認してください。
ミドルウェアとは何ですか?
ミドルウェアは、ミドルウェア方式とリクエスト処理機能の2つの部分で構成されています。
ミドルウェアメソッドはExpressフレームワークによって提供され、リクエストのインターセプトを担当します。リクエスト処理機能は開発者によって提供され、リクエストの処理を担当します。
以下はサンプルプログラムです。
app.get('请求路径',处理函数)
app.post('请求路径',‘处理函数’)
Expressフレームワークは、同じリクエストに対してミドルウェアをセットアップし、同じリクエストを複数回処理できます。
デフォルトでは、リクエストはミドルウェアを上から下に照合します。照合が成功すると、照合は終了します。これにより、リクエストは以下のミドルウェアと一致しなくなります。Expressフレームワークは、次のメソッドを提供します。次のメソッドは、要求の制御を次のミドルウェアに移すために呼び出され、要求を終了するミドルウェアが検出されました。
サンプルコードは次のとおりです。
const express =require('express');
//创建网站服务器
const app=express();
app.get('/request',(req,res,next)=>{
req.name='张三';
next();
})
app.get('/request',(req,res)=>{
res.send(req.name);
})
//监听端口
app.listen(8000);
console.log("网站服务器启动成功!")
app.useミドルウェアの使用法
1. app.useミドルウェアは、すべてのリクエストメソッドに直接一致し、リクエスト処理関数を直接渡すことができます。つまり、すべてのリクエストが受け入れられます。
サンプルプログラム
app.use((req,res,next)=>{
console.log('请求了app.use中间件')
next();
});
2. app.useミドルウェアの最初のパラメーターを要求アドレスに渡すこともできます。つまり、要求方法が何であっても、要求アドレスである限り、要求は受信されます。
app.use('/request',(req,res,next)=>{
console.log('请求了app.use中间件/request')
next();
});
ミドルウェアアプリケーション
1.ルート保護
クライアントがログインする必要のあるページにアクセスすると、最初にミドルウェアを使用してユーザーのログインステータスを判断できます。ユーザーがログインしていない場合、リクエストはインターセプトされ、リクエストは直接応答されます。ログインが必要なページへのユーザーのアクセスを禁止します。
const express =require('express');
//创建网站服务器
const app=express();
app.use('/admin',(req,res,next)=>{
let isLogin=false;
if(isLogin){
next();
}else{
res.send('您还没有登陆,请先登陆!');
}
});
app.get('/admin',(req,res)=>{
res.send('您已经登陆,可以访问当前页面!')
});
//监听端口
app.listen(800);
console.log("网站服务器启动成功!")
2. Webサイトのメンテナンスのお知らせ
すべてのルートの先頭ですべての要求を受信し、クライアントに直接応答するミドルウェアを定義します。
const express =require('express');
//创建网站服务器
const app=express();
app.use((req,res,next)=>{
res.send('当前网络正在维护.....')
});
app.use('/admin',(req,res,next)=>{
let isLogin=false;
if(isLogin){
next();
}else{
res.send('您还没有登陆,请先登陆!');
}
});
app.get('/admin',(req,res)=>{
res.send('您已经登陆,可以访问当前页面!')
});
//监听端口
app.listen(800);
console.log("网站服务器启动成功!")
3.カスタム404ページ
ユーザーがアクセスしたページが存在しない場合、404ページが表示されます。
注:存在しないページuのステータスコードは404であり、Expressフレームワークによって指定されたステータスコードは200です。変更する必要がある場合は、res.status(404)を使用してステータスコードを変更できます。
const express =require('express');
//创建网站服务器
const app=express();
//创建错误
app.get('/index',(req,res)=>{
throw new Error('程序发生了未知错误!')
})
//错误处理中间件
app.use((err,req,res,next)=>{
res.status(500).send(err.message);
})
//监听端口
app.listen(800);
console.log("网站服务器启动成功!")
キャッチエラー
nodejsでは、非同期APIのエラー情報はコールバック関数を介して取得され、Promiseオブジェクトをサポートする非同期APIはcatchメソッドでキャッチできます。非同期関数の実行でエラーが発生した場合、エラーをキャッチするにはどうすればよいですか?
try catchは、非同期関数や他の同期コードの実行中に発生するエラーをキャッチできますが、他のタイプのAPIで発生するエラーをキャッチすることはできません。
サンプルコードは次のとおりです。
const express =require('express');
const fs=require('fs');
//默认情况下fs是不支持异步的,需要对读取文件进行改造
const promisify=require('util').promisify;
const readFile=promisify(fs.readFile);
//创建网站服务器
const app=express();
app.get('/index',async (req,res,next)=>{
try{
await readFile('./aaa.js')
}catch(ex){
next(ex);//触发错误处理中间件
}
})
//错误处理中间件
app.use((err,req,res,next)=>{
res.status(500).send(err.message);
})
//监听端口
app.listen(800);
console.log("网站服务器启动成功!")
注:try-catchメソッドでは、tryメソッドでエラーが発生した場合、catchステートメントを実行し、next(ex)を使用してエラー処理ミドルウェアをトリガーし、次のミドルウェア(エラー処理ミドルウェア)に要求を渡して応答します。エラーメッセージに。