มิดเดิลแวร์และ app.use หมายถึงอะไรใน Expressjs จริง ๆ


228

เกือบทุกแอพ Express ที่ฉันเห็นมีapp.useคำสั่งสำหรับมิดเดิลแวร์ แต่ฉันไม่พบคำอธิบายที่ชัดเจนและรัดกุมว่ามิดเดิลแวร์คืออะไรจริง ๆ และapp.useคำสั่งนั้นกำลังทำอะไร แม้แต่เอกสารด่วนเองก็ค่อนข้างคลุมเครือในเรื่องนี้ คุณช่วยอธิบายแนวคิดเหล่านี้ให้ฉันฟังได้ไหม


3
คำถามที่คล้ายกันสำหรับการอ้างอิง (สิ่งนี้ถูกสร้างขึ้นก่อนหน้านี้): stackoverflow.com/questions/11321635/…
ericsoco

43
^ ฮา! คำถามสองข้อนี้อ้างอิงถึงกันและกันในความคิดเห็น
Julian H. Lam

17
ดังนั้นมันจึงอ้างอิง Cirular
Steve K

6
Express.js Middleware Demystifiedโพสต์บล็อกยอดเยี่ยมในหัวข้อ นี่คือการคัดลอกวางที่นี่ก่อนซึ่งเป็นของลอกเลียนแบบแน่นอน แต่โพสต์ดั้งเดิมยังคงเป็นประโยชน์จริงๆดังนั้นฉันทิ้งลิงค์ไว้ที่นี่
totymedli

1
ฉันเขียนบทความเกี่ยวกับมิดเดิลแวร์ express.js นี่คือลิงค์: nodexplained.com/blog-detail/2017/12/31/ …
shrawan_lakhe

คำตอบ:


111

มิดเดิ้ล

ฉันครึ่งทางผ่านการแยกแนวคิดของมิดเดิลแวร์ในโครงการใหม่

Middleware อนุญาตให้คุณกำหนดสแต็กของการกระทำที่คุณควรดำเนินการ เซิร์ฟเวอร์ Express ตัวเองเป็นกองกลาง

// express
var app = express();
// middleware
var stack = middleware();

จากนั้นคุณสามารถเพิ่มเลเยอร์ในมิดเดิลแวร์สแต็กได้โดยการโทร .use

// express
app.use(express.static(..));
// middleware
stack.use(function(data, next) {
  next();
});

ชั้นในมิดเดิลแวร์สแต็คเป็นฟังก์ชั่นซึ่งใช้พารามิเตอร์ n (2 สำหรับด่วนreqและres) และnextฟังก์ชั่น

nextมิดเดิ้ลคาดว่าชั้นจะทำคำนวณบางเพิ่มพารามิเตอร์แล้วโทร

สแต็คไม่ได้ทำอะไรนอกจากคุณจะจัดการมัน Express จะจัดการกับสแต็กทุกครั้งที่มีการร้องขอ HTTP ขาเข้าที่ติดบนเซิร์ฟเวอร์ ด้วยมิดเดิลแวร์คุณจัดการสแต็กด้วยตนเอง

// express, you need to do nothing
// middleware
stack.handle(someData);

ตัวอย่างที่สมบูรณ์ยิ่งขึ้น:

var middleware = require("../src/middleware.js");

var stack = middleware(function(data, next) {
    data.foo = data.data*2;
    next();
}, function(data, next) {
    setTimeout(function() {
        data.async = true;
        next();
    }, 100)
}, function(data) {
    console.log(data);
});

stack.handle({
    "data": 42
})

ในแง่ด่วนคุณเพียงแค่กำหนดสแต็คของการดำเนินการที่คุณต้องการให้ Express จัดการกับคำขอ HTTP ที่เข้ามาทุกครั้ง

ในแง่ของ express (แทนที่จะเชื่อมต่อ) คุณมีมิดเดิลแวร์ระดับโลกและมิดเดิลแวร์เฉพาะเราต์ ซึ่งหมายความว่าคุณสามารถแนบมิดเดิลแวร์สแต็กกับทุกคำขอ HTTP ขาเข้าหรือแนบเฉพาะกับคำขอ HTTP ที่ทำงานกับเส้นทางที่แน่นอน

ตัวอย่างขั้นสูงของ express & middleware:

// middleware 

var stack = middleware(function(req, res, next) {
    users.getAll(function(err, users) {
        if (err) next(err);
        req.users = users;
        next();  
    });
}, function(req, res, next) {
    posts.getAll(function(err, posts) {
        if (err) next(err);
        req.posts = posts;
        next();
    })
}, function(req, res, next) {
    req.posts.forEach(function(post) {
        post.user = req.users[post.userId];
    });

    res.render("blog/posts", {
        "posts": req.posts
    });
});

var app = express.createServer();

app.get("/posts", function(req, res) {
   stack.handle(req, res); 
});

// express

var app = express.createServer();

app.get("/posts", [
    function(req, res, next) {
        users.getAll(function(err, users) {
            if (err) next(err);
            req.users = users;
            next();  
        });
    }, function(req, res, next) {
        posts.getAll(function(err, posts) {
            if (err) next(err);
            req.posts = posts;
            next();
        })
    }, function(req, res, next) {
        req.posts.forEach(function(post) {
            post.user = req.users[post.userId];
        });

        res.render("blog/posts", {
            "posts": req.posts
        });
    }
], function(req, res) {
   stack.handle(req, res); 
});

4
อืม ... เป็นมิดเดิลแวร์ในกรณีนี้ห้องสมุดของคุณเองหรือเป็นส่วนหนึ่งของบริการด่วน?
iZ

5
เย็น. ฉันยังสับสนกับapp.use()ไวยากรณ์ มูลค่าส่งคืนที่แท้จริงของมิดเดิลแวร์คืออะไรและuseเกี่ยวข้องกับอะไร?
iZ

9
ใช้ @iZ เพิ่มลงในสแต็ก จากนั้นทุกคำร้องขอจะผ่านไปยังกองซ้อน
Raynos

7
@Raynos ลิงก์ไปยังโครงการของคุณ "มิดเดิลแวร์" เสียหาย
ลี

1
@ Raynos แต่ฉันเห็นว่ามิดเดิลแวร์ยังคงถูกใช้ใน Express? คุณหมายความว่ามันเป็นนกอะไร
Timo Huovinen

60

หลังจากทำให้สิ่งต่าง ๆ ง่ายขึ้นเว็บเซิร์ฟเวอร์สามารถถูกมองว่าเป็นฟังก์ชั่นที่ใช้ในการร้องขอและแสดงผลการตอบสนอง ดังนั้นหากคุณดูเว็บเซิร์ฟเวอร์เป็นฟังก์ชั่นคุณสามารถจัดระเบียบมันเป็นหลาย ๆ ส่วนและแยกพวกมันออกเป็นฟังก์ชั่นที่เล็กลงเพื่อให้องค์ประกอบของพวกมันกลายเป็นฟังก์ชั่นดั้งเดิม

Middlewares เป็นฟังก์ชั่นที่เล็กกว่าที่คุณสามารถเขียนร่วมกับผู้อื่นได้และข้อดีที่ชัดเจนคือคุณสามารถนำกลับมาใช้ใหม่ได้


33

ฉันเพิ่มคำตอบที่ล่าช้าเพื่อเพิ่มสิ่งที่ไม่ได้กล่าวถึงในคำตอบก่อนหน้า

โดยตอนนี้มันควรจะเป็นที่ชัดเจนว่าเป็นตัวกลาง / มีฟังก์ชั่น (s) วิ่งระหว่างคำขอของลูกค้าและคำตอบของเซิร์ฟเวอร์ ฟังก์ชั่นมิดเดิลแวร์ที่พบมากที่สุดที่ต้องการคือการจัดการข้อผิดพลาดการโต้ตอบของฐานข้อมูลการรับข้อมูลจากไฟล์สแตติกหรือทรัพยากรอื่น ๆ หากต้องการย้ายไปที่มิดเดิลแวร์สแต็กจะต้องเรียกกลับมาครั้งต่อไปคุณสามารถดูได้ที่ท้ายฟังก์ชั่นมิดเดิลแวร์เพื่อย้ายไปยังขั้นตอนถัดไปในโฟลว์

คุณสามารถใช้app.useวิธีการและมีลักษณะดังนี้:

var express = require('express'),
    app = express.createServer(),                                                                                                                                                 
    port = 1337;

function middleHandler(req, res, next) {
    console.log("execute middle ware");
    next();
}

app.use(function (req, res, next) {
    console.log("first middle ware");                                                                                                             
    next();
});

app.use(function (req, res, next) {
    console.log("second middle ware");                                                                                                             
    next();
});

app.get('/', middleHandler, function (req, res) {
    console.log("end middleware function");
    res.send("page render finished");
});

app.listen(port);
console.log('start server');

แต่คุณสามารถใช้วิธีอื่นและส่งผ่านมิดเดิลแวร์แต่ละรายการเป็นอาร์กิวเมนต์ของฟังก์ชันได้ นี่คือตัวอย่างจากเว็บไซต์ MooTools Nodejsที่ midleware ได้รับกระแส Twitter, Github และ Blog ก่อนที่responseจะถูกส่งกลับไปยังลูกค้า โปรดทราบว่าฟังก์ชั่นจะถูกส่งผ่านเป็นอาร์กิวเมนต์app.get('/', githubEvents, twitter, getLatestBlog, function(req, res){มา การใช้app.getจะถูกเรียกสำหรับคำขอ GET เท่านั้นและapp.useจะถูกเรียกใช้สำหรับคำขอทั้งหมด

// github, twitter & blog feeds
var githubEvents = require('./middleware/githubEvents')({
    org: 'mootools'
});
var twitter = require('./middleware/twitter')();
var blogData = require('./blog/data');
function getLatestBlog(req, res, next){
    blogData.get(function(err, blog) {
        if (err) next(err);
        res.locals.lastBlogPost = blog.posts[0];
        next();
    });
}

// home
app.get('/', githubEvents, twitter, getLatestBlog, function(req, res){
    res.render('index', {
        title: 'MooTools',
        site: 'mootools',
        lastBlogPost: res.locals.lastBlogPost,
        tweetFeed: res.locals.twitter
    });
});

2
ฉันกำลังมองหาคำตอบว่า Express.js รองรับการติดตั้งมิดเดิลแวร์ตามเส้นทาง (ไม่ใช่เราเตอร์) หรือไม่ ดูเหมือนว่าคุณได้แสดงมันไว้ในคำตอบของคุณ
Selçuk

คุณสามารถอธิบายตัวอย่างข้างต้นของคุณได้อย่างไรคุณจะส่งผ่านฟังก์ชั่นมากมายไปยัง app.get (... ) และพวกเขาเรียกลำดับอะไรได้บ้าง
แทนเนอร์ซัมเมอร์ส

2
สวัสดี @ToolsSummers .get()วิธีการใช้ 3 ประเภทของการขัดแย้ง: ครั้งแรกที่ผ่านมาและคนที่อยู่ตรงกลาง ภายในจะตรวจพบว่ามีข้อโต้แย้งมากกว่า 2 และใช้สิ่งเหล่านั้น (อันกลาง) เป็นฟังก์ชั่นมิดเดิลแวร์เรียกพวกเขาจากซ้ายไปขวา
Sergio

22

คู่มือ expressjs มีคำตอบที่ค่อนข้างสวยสำหรับคำถามของคุณฉันขอแนะนำให้คุณอ่านว่าฉันโพสต์ตัวอย่างสั้น ๆ ของคำแนะนำคู่มือนั้นค่อนข้างดี

การเขียนมิดเดิลแวร์สำหรับใช้ในแอพ Express

ภาพรวม

ฟังก์ชั่นมิดเดิลแวร์เป็นฟังก์ชั่นที่มีการเข้าถึงวัตถุคำขอ ( req ),วัตถุตอบสนอง ( res ) และฟังก์ชั่นถัดไปในวงจรคำขอตอบสนองของแอปพลิเคชัน ฟังก์ชั่นถัดไปเป็นฟังก์ชั่นในเราเตอร์ด่วนซึ่งเมื่อเรียกใช้งานจะดำเนินการมิดเดิลแวร์ที่ประสบความสำเร็จในมิดเดิลแวร์ปัจจุบัน

ฟังก์ชัน Middleware สามารถทำงานต่อไปนี้:

  • รันรหัสใด ๆ
  • ทำการเปลี่ยนแปลงคำขอและวัตถุตอบกลับ
  • จบรอบการตอบรับคำขอ
  • เรียกมิดเดิลแวร์ถัดไปในสแต็ก

หากฟังก์ชันมิดเดิลแวร์ปัจจุบันไม่สิ้นสุดรอบการตอบสนองคำขอจะต้องเรียกถัดไป ()เพื่อผ่านการควบคุมไปยังฟังก์ชั่นมิดเดิลแวร์ถัดไป มิฉะนั้นคำขอจะถูกปล่อยให้ค้าง

ป้อนคำอธิบายรูปภาพที่นี่

ตัวอย่าง

นี่คือตัวอย่างของแอปพลิเคชัน“ Hello World” Express ที่เรียบง่าย ส่วนที่เหลือของบทความนี้จะกำหนดและเพิ่มสองฟังก์ชันมิดเดิลแวร์ให้กับแอปพลิเคชัน: หนึ่งเรียกว่าmyLoggerที่พิมพ์ข้อความบันทึกอย่างง่ายและอีกเรียกว่าrequestTime 1ที่แสดงการประทับเวลาของการร้องขอ HTTP

var express = require('express')
var app = express()

app.get('/', function (req, res) {
  res.send('Hello World!')
})

app.listen(3000)   

ฟังก์ชั่นมิดเดิลแวร์ myLogger

นี่คือตัวอย่างง่ายๆของฟังก์ชั่นมิดเดิลแวร์ที่เรียกว่า“ myLogger” ฟังก์ชั่นนี้จะพิมพ์“ LOGGED” เมื่อคำขอไปยังแอปผ่านไป ฟังก์ชั่นมิดเดิลแวร์ถูกกำหนดให้กับตัวแปรชื่อ myLogger

var myLogger = function (req, res, next) {
  console.log('LOGGED')
  next()
}

ขอให้สังเกตโทรข้างต้นไปถัดไป () การเรียกใช้ฟังก์ชันนี้จะเรียกใช้ฟังก์ชันมิดเดิลแวร์ถัดไปในแอพ ฟังก์ชันถัดไป ()ไม่ได้เป็นส่วนหนึ่งของ Node.js หรือ Express API แต่เป็นอาร์กิวเมนต์ที่สามที่ส่งผ่านไปยังฟังก์ชันมิดเดิลแวร์ ถัดไป ()ฟังก์ชั่นอาจจะชื่ออะไร แต่โดยการประชุมมันเป็นชื่อเสมอ“ถัดไป” เพื่อหลีกเลี่ยงความสับสนให้ใช้ระเบียบนี้เสมอ

หากต้องการโหลดฟังก์ชันมิดเดิลแวร์ให้เรียกใช้app.use ()เพื่อระบุฟังก์ชั่นมิดเดิลแวร์ ตัวอย่างเช่นรหัสต่อไปนี้โหลดฟังก์ชั่นมิดเดิลแวร์myLoggerก่อนเส้นทางไปยังเส้นทางราก (/)

var express = require('express')
var app = express()

var myLogger = function (req, res, next) {
  console.log('LOGGED')
  next()
}

app.use(myLogger)

app.get('/', function (req, res) {
  res.send('Hello World!')
})

app.listen(3000)

ทุกครั้งที่แอปได้รับคำขอมันจะพิมพ์ข้อความ“ LOGGED” ไปยังเครื่องปลายทาง

ลำดับของการโหลดมิดเดิลแวร์สำคัญ: ฟังก์ชั่นมิดเดิลแวร์ที่ถูกโหลดก่อนจะถูกเรียกใช้งานก่อน

หากโหลดmyLoggerหลังจากเราต์ไปยังรูทพา ธ คำขอจะไม่มาถึงและแอปจะไม่พิมพ์“ LOGGED” เนื่องจากตัวจัดการเส้นทางของรูทพา ธ จะยกเลิกรอบการตอบสนองคำขอ

ฟังก์ชั่นมิดเดิลแวร์myLoggerเพียงพิมพ์ข้อความจากนั้นส่งผ่านการร้องขอไปยังฟังก์ชั่นมิดเดิลแวร์ต่อไปในสแต็กโดยการเรียกฟังก์ชั่นถัดไป ()


  1. โพสต์นี้จะมีเฉพาะ myLogger ตัวกลางสำหรับโพสต์ต่อไปที่คุณสามารถไป expressjs เดิมแนะนำที่นี่


1
คำอธิบายที่ดีมาก
Drumbeg

มันมีอยู่ในเว็บไซต์ด่วนที่นี่expressjs.com/th/guide/writing-middleware.html มันดีจริงๆ ฉันสงสัยว่าทำไมไม่มีใครพูดถึงมัน
Suraj Jain

2
ทำได้ดีนี่. มันเป็นคำอธิบายที่ชัดเจนที่สุดที่ฉันเคยเห็นที่นี่และใช่แปลกที่ไม่มีใครอ้างถึง!
Drumbeg

1
อธิบายอย่างดี
Rehan Shikkalgar

ลำดับของการโหลดมิดเดิลแวร์สำคัญ: ฟังก์ชั่นมิดเดิลแวร์ที่ถูกโหลดก่อนจะถูกเรียกใช้งานก่อน : นี่เป็นบันทึกที่สำคัญมาก ไม่มีคำตอบอื่น ๆ ที่กล่าวถึงนี้ สำหรับผู้เริ่มต้นที่ทำงานกับ python เท่านั้นสิ่งนี้สำคัญอย่างยิ่งเพราะอาจไม่เคยพบสิ่งเหล่านี้มาก่อน
Tessaracter

11

===== คำอธิบายที่ง่ายมาก =====

มิดเดิ้ลแวร์มักใช้ในบริบทของกรอบงาน Express.js และเป็นแนวคิดพื้นฐานสำหรับ node.js โดยสรุปแล้วมันเป็นฟังก์ชั่นที่สามารถเข้าถึงวัตถุคำขอและตอบสนองของแอปพลิเคชันของคุณ วิธีที่ฉันคิดเกี่ยวกับมันคือชุดของ 'การตรวจสอบ / ก่อนหน้าจอ' ที่คำขอผ่านก่อนที่แอปพลิเคชันจะได้รับการจัดการ ตัวอย่างเช่น Middlewares จะเป็นแบบที่ดีในการตรวจสอบว่าคำขอได้รับการรับรองความถูกต้องก่อนที่จะดำเนินการใบสมัครและกลับสู่หน้าเข้าสู่ระบบหากคำขอไม่ได้รับการรับรองความถูกต้องหรือสำหรับการบันทึกแต่ละคำขอ มิดเดิลแวร์ของบุคคลที่สามจำนวนมากมีพร้อมใช้งานที่ช่วยให้ใช้งานได้หลากหลาย

ตัวอย่างมิดเดิลแวร์แบบง่าย:

var app = express();
app.use(function(req,res,next)){
    console.log("Request URL - "req.url);
    next();
}

รหัสข้างต้นจะถูกดำเนินการสำหรับการร้องขอแต่ละครั้งที่เข้ามาและจะเข้าสู่ระบบการร้องขอ URL วิธีการ () ต่อไปเป็นหลักช่วยให้โปรแกรมเพื่อดำเนินการต่อ หากไม่ได้เรียกใช้ฟังก์ชันถัดไปโปรแกรมจะไม่ดำเนินการต่อไปและจะหยุดเมื่อเรียกใช้งานมิดเดิลแวร์

Middleware Gotchas คู่หนึ่ง:

  1. ลำดับของมิดเดิลแวร์ในแอปพลิเคชันของคุณมีความสำคัญเนื่องจากคำขอจะผ่านแต่ละลำดับตามลำดับ
  2. การลืมเรียกวิธีถัดไป () ในฟังก์ชั่นมิดเดิลแวร์สามารถหยุดการประมวลผลคำขอของคุณ
  3. การเปลี่ยนแปลงใด ๆ req และ res วัตถุในฟังก์ชั่นมิดเดิลแวร์จะทำให้การเปลี่ยนแปลงสามารถใช้ได้กับส่วนอื่น ๆ ของแอพลิเคชันที่ใช้ req และ res

1
ขอบคุณมาก! นี่คือคำอธิบายที่ดีที่สุดที่จะเข้าใจสิ่งนี้ คำถามที่ผมกำลังอ่านรหัสบางอย่างกับตัวกลางและมันไม่ได้เรียกแต่next() return next()อะไรคือความแตกต่าง?
KansaiRobot

ขอบคุณเพื่อนมากสำหรับคำพูดที่ใจดี ... เราทำnext()เพราะเราต้องการให้มิดเดิลแวร์ต่อไปถูกเรียกฉันไม่คิดnext()หรือreturn next()ควรสร้างความแตกต่าง! ก็ยังขึ้นอยู่กับสิ่งรหัสคือ ...
Vaibhav Bacchav

7

มิดเดิ้ลแวร์เป็นฟังก์ชั่นที่ดำเนินการตรงกลางหลังจากอินพุต / แหล่งที่มาจากนั้นสร้างเอาต์พุตซึ่งอาจเป็นเอาต์พุตสุดท้ายหรือสามารถใช้โดยมิดเดิ้ลถัดไปจนกว่าวงจรจะเสร็จสมบูรณ์

มันเป็นเหมือนผลิตภัณฑ์ที่ต้องผ่านสายการประกอบที่จะได้รับการแก้ไขในขณะที่มันเคลื่อนที่ไปเรื่อย ๆ จนกว่ามันจะเสร็จสมบูรณ์ประเมินหรือถูกปฏิเสธ

มิดเดิลแวร์คาดว่าค่าบางอย่างจะทำงาน (เช่นค่าพารามิเตอร์) และขึ้นอยู่กับตรรกะบางอย่างมิดเดิลแวร์จะเรียกหรือไม่เรียกมิดเดิลแวร์ต่อไปหรือส่งการตอบกลับกลับไปยังลูกค้า

หากคุณยังไม่เข้าใจแนวคิดของมิดเดิลแวร์มันจะคล้ายกับรูปแบบของ Decorator หรือ Chain of command


5

Middleware เป็นชุดย่อยของฟังก์ชั่นที่ถูกล่ามโซ่ที่เรียกโดยเลเยอร์การจัดเส้นทาง Express js ก่อนที่จะเรียกใช้ตัวจัดการที่ผู้ใช้กำหนด ฟังก์ชั่น Middleware สามารถเข้าถึงวัตถุคำขอและตอบสนองได้อย่างเต็มที่และสามารถแก้ไขได้ทั้งสองอย่าง

มิดเดิลแวร์เชนจะถูกเรียกตามลำดับที่ถูกกำหนดไว้เสมอดังนั้นจึงเป็นเรื่องสำคัญที่คุณจะต้องทราบว่ามิดเดิลแวร์ชิ้นใดชิ้นหนึ่งกำลังทำอยู่
เมื่อฟังก์ชันมิดเดิลแวร์เสร็จสิ้นฟังก์ชันจะเรียกใช้ฟังก์ชันถัดไปในห่วงโซ่โดยเรียกใช้อาร์กิวเมนต์ถัดไปเป็นฟังก์ชัน
หลังจากที่ได้รับการดำเนินการห่วงโซ่ทั้งหมดตัวจัดการการร้องขอของผู้ใช้จะถูกเรียก


1

ทำสิ่งที่ง่ายผู้ชาย!

หมายเหตุ:คำตอบนั้นเกี่ยวข้องกับเคส middlware ในตัว ExpressJS อย่างไรก็ตามมีคำจำกัดความที่แตกต่างกันและใช้เคสของมิดเดิลแวร์

จากมุมมองของฉันมิดเดิลแวร์ทำหน้าที่เป็นยูทิลิตี้หรือฟังก์ชั่นผู้ช่วย แต่การเปิดใช้งานและการใช้งานเป็นทางเลือกอย่างสมบูรณ์โดยใช้สิ่งapp.use('path', /* define or use builtin middleware */)ที่ไม่ต้องการจากเราในการเขียนโค้ดบางอย่างสำหรับการทำงานทั่วไปที่จำเป็นสำหรับแต่ละคำขอ HTTP ของลูกค้า เช่นการประมวลผลคุกกี้โทเค็น CSRF และ ... ซึ่งเป็นเรื่องธรรมดาในแอปพลิเคชันส่วนใหญ่ดังนั้นมิดเดิลแวร์สามารถช่วยเราทำสิ่งเหล่านี้สำหรับคำขอ HTTP แต่ละครั้งของลูกค้าของเราในสแต็กลำดับหรือลำดับการดำเนินการจากนั้นให้ผลลัพธ์ของกระบวนการ หน่วยเดียวของคำขอของลูกค้า

ตัวอย่าง:

การยอมรับคำขอของลูกค้าและให้การตอบกลับตามคำขอเป็นลักษณะของเทคโนโลยีเว็บเซิร์ฟเวอร์

ลองคิดดูว่าเราจะให้คำตอบกับ "สวัสดีโลก!" ข้อความสำหรับคำขอ GET HTTP ไปยังรูท URI ของเว็บเซิร์ฟเวอร์ของเราเป็นสถานการณ์ที่ง่ายมากและไม่ต้องการสิ่งอื่น แต่ถ้าเรากำลังตรวจสอบผู้ใช้ที่เข้าสู่ระบบในปัจจุบันและตอบกลับด้วย "สวัสดีชื่อผู้ใช้!" ต้องการสิ่งที่มากกว่าปกติในกรณีนี้เราต้องการมิดเดิลแวร์ในการประมวลผลข้อมูลเมตาคำขอทั้งหมดของลูกค้าและให้ข้อมูลระบุตัวบุคคลที่คว้ามาจากคำขอของลูกค้าจากนั้นตามข้อมูลนั้นเราสามารถระบุผู้ใช้ปัจจุบันของเราโดยเฉพาะและเป็นไปได้ / เธอกับข้อมูลที่เกี่ยวข้อง

หวังว่าจะช่วยใครซักคน!


-1

ในระยะพื้นฐานมากถ้าฉันต้องการอธิบายแบบนี้ฉันได้เรียนรู้สิ่งนี้จาก traversymedia youtube channel express crash crash course
ok so middle ware เป็นฟังก์ชั่นที่ทำงานหลังจากคุณโทรไปยังเส้นทางของคุณเช่นนี้

var logger = function(req, res, next){
   console.log('logging...');
   next();
}

app.use(logger);

ฟังก์ชั่นตัวบันทึกนี้จะทำงานทุกครั้งที่คุณรีเฟรชหน้าเว็บของคุณซึ่งหมายความว่าคุณสามารถเขียนอะไรก็ได้ที่คุณจำเป็นต้องทำหลังจากที่หน้าของคุณแสดงผลการเรียกใช้ API แล้วรีเซ็ตสิ่งต่าง ๆ โดยทั่วไป และวางมิดเดิลแวร์นี้ไว้ก่อนเพื่อให้ฟังก์ชั่นการจัดเส้นทางของมิดเดิลแวร์ของคุณนั้นสำคัญมากหรือไม่ได้ผล

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.