Maison  >  Article  >  interface Web  >  Explication détaillée de l'utilisation du middleware de routage node.js et des requêtes post

Explication détaillée de l'utilisation du middleware de routage node.js et des requêtes post

php中世界最好的语言
php中世界最好的语言original
2018-04-13 14:38:481548parcourir

Cette fois, je vais vous apporter une explication détaillée de l'utilisation du middleware de routage node.js et des requêtes de publication. Quelles sont les précautions lors de l'utilisation du middleware de routage node.js et des requêtes de publication. Ce qui suit est un cas pratique, jetons un coup d'œil.

1. Routage

   1. Qu'est-ce que le routage

Le serveur doit effectuer différentes opérations selon différentes URL ou requêtes. Nous pouvons réaliser cette étape grâce au routage

.    2. Méthodes de mise en œuvre du routage

     2.1. Que faire lorsque vous recevez des demandes d'accès à l'URL

 app.get("网址",function(req,res){
  
 });

2.2. Que faire lorsque la publication demande l'accès à une adresse de site Web

 app.post("网址",function(req,res){
  
 });

    2.3. Toute demande d'accès à ce site Internet   

 app.all("网址",function(){
  
 });

Remarque : 1. L'URL ici n'est pas sensible à la casse, par exemple

 app.get("/AAb",function(req,res){        //我们访问  /aab也是可以的
  res.send("你好");
 });

      2. Si vous routez vers /a, le /a?id=2&sex =nan réel peut également être traité.   

 3. Utilisation des expressions régulières dans le routage

     3.1. Dans les expressions régulières, les parties inconnues sont regroupées entre parenthèses et peuvent être obtenues en utilisant req.params[0], [1]. Objet tableau req.params. 

 app.get(/^\/student\/([\d]{10})$/,function(req,res){
  res.send("学生信息,学号" + req.params[0]);
 });

     3.2. Écriture côlon (recommandée)

var express=require('express');
var app=express();
//冒号1
app.get("/student/:id",function (req,res) {
 var id=req.params["id"];                    //得到id的值
 var reg=/^[\d]{6}$/;
 if(reg.test(id)){
  res.send(id);
 }else {
  res.send("请检查格式");
 }
});
//冒号2
app.get("/:username/:oid",function(req,res){
 var username = req.params["username"];            //得到username的值
 var oid = req.params["oid"];                  //得到//oid的值
 res.write(username);
 res.end(oid);
});
app.listen(3000);

2. Intergiciel

 1. Qu'est-ce qu'un middleware

    Appliquées pour servir de service de connexion entre des applications, par exemple, les requêtes get et post ci-dessus sont des middlewares

 2. L'ordre de toutes les routes (middleware) en express (très important)

       2.1, méthode next()      

var express=require("express");
var app=express();
app.get("/",function (req,res,next) {
 console.log(1);
 next();    //如果没有next参数,就只会conlose出来1,而不会是1,2
});
app.get("/",function (req,res) {
 console.log(2);
});
 app.listen(3000);

      2.2. Conflit de séquence : les deux itinéraires suivants semblent n'avoir aucune relation, mais en fait ils sont en conflit car admin peut être utilisé comme nom d'utilisateur et login peut être utilisé comme identifiant

var express=require("express");
var app=express();
app.get("/:username/:id",function(req,res){
  console.log("1");
  res.send("用户信息" + req.params.username);
});
app.get("/admin/login",function(req,res){
  console.log("2");
  res.send("管理员登录");
});
app.listen(3000)

Résultats de l'opération : lorsque nous accédons à 172.0.0.1:3000/admin/login, seules les informations utilisateur admin seront affichées au lieu de la connexion administrateur

  2.3. Résoudre les conflits de séquence

      2.3.1. Écrivez les concrets et les abstraits.       

var express=require("express");
var app=express();
//具体的
app.get("/admin/login",function(req,res){
  console.log("2");
  res.send("管理员登录");
});
//抽象的
app.get("/:username/:id",function(req,res){
  console.log("1");
  res.send("用户信息" + req.params.username);
});
app.listen(3000)

Résultats d'exécution : lorsque nous accédons à 172.0.0.1:3000/admin/login, le résultat est la connexion de l'administrateur au lieu des informations utilisateur admin

    2.3.2, Récupérer des données bibliothèque

var express=require("express");
var app=express();
app.get("/:username/:id",function (req,res,next) {
  var username=req.params.username;
  //检索数据库,如果username 不存在,那么next()
 if(检索数据库){
  console.log("1");
  res.send("用户信息")
 }else{
  next();
 }
});
app.get("/admin/login",function (req,res) {
 console.log("2");
 res.send("管理员登录");
});
app.listen(3000)

  3. Middleware app.use() : contrairement à get et post, son URL ne correspond pas exactement. Mais il peut être étendu avec de petits dossiers.

     3.1. Correspondance floue de get.use()

var express=require("express");
var app=express();
//匹配所有网址
//法一
//当你不写路径的时候,实际上就相当于“/”,就是所有网址
// app.use(function (req,res,next) {
//  console.log(new Date());
//  next();     //执行下面的
// });
//法二
app.use("/",function (req,res,next) {
 console.log(new Date());
 next();     //执行下面的
});
//匹配/admin所有地址,例如/admin/ss/aa这个都行
app.use("/admin",function (req,res) {
 res.write(req.originalUrl+"\n"); // /admin/ss/aa
 res.write(req.path+"\n");   // /ss/aa
 res.write(req.baseUrl+"\n");  // /admin
 res.end("你好");
});
app.listen(3000);

  3.2, get.use()Lire le fichier

var express=require("express");
var fs=require("fs");
var app=express();
//当你不写路径的时候,实际上就相当于“/”,就是所有网址
app.use(haha);  //haha是一个函数
app.listen(3000);
// function haha(req,res) {
//  res.send("哈哈");
// }
app.use('/admin',function (req,res) {
 res.send('管理员登录');
})
//根据当前的网址,读取punlic文件夹的文件
//如果有这个文件,就渲染这个文件
//如果没有这个文件,那么next()
function haha(req,res,next) {
 var filePath=req.originalUrl;
 //根据当前的网址,读取public文件夹的文件
 //如果有这个文件,那么渲染这个文件
 //如果没哟偶这个文件,那么next();
 fs.readFile("./public/"+filePath,function (err,data) {
  if(err){
   //文件不存在
   next(); //一定要写,不然处于挂起状态
   return;
  }
  res.send(data.toString());
 })
}

  4. rendre et envoyer

      4.1, page de test rapide de la méthode res.send()

var express=require("express");
var app=express();
//静态服务
app.use('/jingtai',express.static("./public"));
//新的路由
app.get('/images',function (req,res) {
 res.send("哈哈")
});
//会自动识别err参数,如果有,那么就这个函数能捕获err
app.use(function (req,res) {
 res.status(404).send("没有这个页面!");
})
app.listen(3000);

     4.2. Le contenu rendu par res.render() sera rendu selon le fichier modèle dans les vues. Si vous ne souhaitez pas utiliser le dossier vues et souhaitez définir vous-même le nom du dossier, alors app.set("views","aaaa");

var express=require("express");
var app=express();
// //设置ejs文件夹名字  //在day3文件夹下新建文件夹a,然后在里面放ejs文件
// app.set("views","a")
app.set("view engine","ejs");
app.get("/",function(req,res) {
 res.render("haha",{news:[]});
});
app.get("/check",function (req,res) {
 res.send({
  "user":"ok"
 })
})
app.listen(3000);

  5.req.query : lors de la saisie de http://127.0.0.1:3000/?id=0&ag=9

var express=require("express");
var app=express();
app.get("/",function (req,res) {
 console.log(req.query);
 res.send();
});
app.listen(3000);

Résultat en cours d'exécution :

Explication détaillée de lutilisation du middleware de routage node.js et des requêtes post

3. obtenirparamètres de requêteparamètres de requête de publication :

Paramètres de la requête GET : Dans l'URL, en Express, il n'est pas nécessaire d'utiliser le module url. Vous pouvez utiliser l'objet req.query directement.

Paramètres de la requête POST : ne peuvent pas être obtenus directement en express, vous devez utiliser le module body-parser. Après utilisation, vous pouvez utiliser req.body pour obtenir les paramètres. Mais si le formulaire contient Téléchargement de fichiers, alors vous devez quand même utiliser le formidable module.

//form.ejs
nbsp;html>


 <meta>
 <title></title>


     
//.jsvar express=require("express");
var bodyParser=require('body-parser');
var app=express();
app.set('view engine','ejs')
app.get('/',function (req,res) {
 res.render("form");
});
//bodyParser API
app.use(bodyParser.urlencoded({extended:false}));
app.post('/',function (req,res) {
 console.log(req.body);
});
app.listen(3000);

Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !

Lecture recommandée :

La boîte modale Bootstrap apparaît plusieurs fois pour soumettre un BUG

Comment vue-cli configure lib-flexible+ rem mobile Terminal adaptatif

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn