javascript - NodeJs 和 ExpressJs 中间件依赖于正在使用的另一个中间件

标签 javascript node.js express cookies

我正在创建一个快速中间件。我的 index.js 导出是一个返回 function(req,res,next) {...}

的函数
function myMiddleware (options) {
    //some stuff with options...
    return function middleware(req, res, next) {
        //stuff
    }
}

module.exports = myMiddleware;

因此用户可以像这样开始使用我的中间件:

var express = require('express'),
    myMiddleware = require('my-middleware'),

    app = express();
    app.use(myMiddleware());

重要的是我必须确保中间件可以访问cookie。当然,我可以自己解析 req.header.cookie ,但是存在一个 cookie 解析器模块可以为我进行解析。

所以我想确保当我的中间件启动时 cookie 解析器中间件已经被使用。我可能可以指示用户首先使用 cookieParser() 但我不喜欢它。

有什么办法可以轻松实现吗?

编辑

我什至可以移植 cookie-parser,因为它不是一个巨大的模块。但这可能是我最不会做的事情,因为它会带来很多我通常不会做的维护工作。

最佳答案

您有两个选择:

如果 req.cookies 未定义,则强制使用 cookie-parser 中间件。 如果 cookie-parser 已经被调用,则该调用将被忽略。请参阅:https://github.com/expressjs/cookie-parser/blob/master/index.js

这种方法的缺点是 cookieParser 中间件只有默认选项。

var cookieParser = require('cookie-parser');

function myMiddleware(options) {
  return function(req, res, next) {
    return cookieParser()(req, res, function() {
      // Your middleware code
      return next();
    });
  }
}

如果 req.cookies 未定义,则发出警告

function myMiddleware(options) {
  return function(req, res, next) {
    if(!req.cookies) {
      // Some warning
    }
    // Your middleware code
    return next();
  }
}

关于javascript - NodeJs 和 ExpressJs 中间件依赖于正在使用的另一个中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40891095/

相关文章:

node.js - 渲染 svg 文件并使用 Express 提供服务

javascript - Express 不渲染 Bootstrap

javascript - Jquery/javascript 方式发送 50 个表单,就好像它是 1 个表单一样?

javascript - 仅显示 google.maps.event.addListener() 中的街道地址

javascript - 防止屏幕向下移动到响应式下拉菜单中的 anchor

javascript - 有没有办法在将控制权移交给 Meteor.js 之前访问 Node.js,以便为某些请求提供静态站点?

javascript - Node.js 应用程序中的 Angular.js 功能

javascript - 将隐藏选项卡中的 HTML5 验证事件传递给 JavaScript 函数

mysql - 循环遍历 MySQL 行并将结果存储在数组中

sql - 我需要将 SQL 参数转换为 Sequelize