栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

中间件和app.use在Expressjs中实际上意味着什么?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

中间件和app.use在Expressjs中实际上意味着什么?

中间件

我在一个新项目中将中间件的概念分离了一半。

中间件使您可以定义应执行的操作堆栈。Express服务器本身就是一堆中间件。

// expressvar app = express();// middlewarevar stack = middleware();

然后您可以通过调用将层添加到中间件堆栈

.use

// expressapp.use(express.static(..));// middlewarestack.use(function(data, next) {  next();});

中间件堆栈中的一层是一个函数,该函数采用n个参数(express为

req
&表示2个
res
)和一个
next
函数。

中间件希望该层进行一些计算,增加参数,然后调用

next

除非您处理堆栈,否则堆栈不会执行任何操作。每当服务器上捕获到传入的HTTP请求时,Express都会处理堆栈。使用中间件,您可以手动处理堆栈。

// express, you need to do nothing// middlewarestack.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})

用快速术语来说,您只需定义要快速处理的每个传入HTTP请求的操作堆栈。

就快速(而非连接)而言,您具有全局中间件和特定于路由的中间件。这意味着您可以将中间件堆栈附加到每个传入的HTTP请求,或仅将其附加到与特定路由交互的HTTP请求。

快递和中间件的高级示例:

// middlewarevar 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); });// expressvar 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); });


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/484590.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号