首页 > 解决方案 > 如何为 node.js 插件创建包装类

问题描述

所以我是 JavaScript 新手,并且有一个项目,我正在使用此处找到的 Node.js cookie 模块。我已经能够创建cookie并正确设置它们,如下所示:

this.Vue.$cookies.set('cookieName', cookieValue, {
          sameSite: 'lax',
          secure: true
});

但是,我想创建一个包装函数/类,这样我就可以将sameSite: 'lax'andsecure: true选项设置为默认值,而不必在每次set从该模块调用函数时都传递它们。显然,如果我愿意,我也希望能够将这些选项覆盖为其他内容。

查看我在其他地方找到的示例,我认为该类应该看起来这样:

const cookies = require('cookie-universal-nuxt');

cookies(function ($) {

    const defaultOptions = {
        sameSite: 'lax',
        secure: true
    };

    return {
        get: function(name, options) {
            return $.cookies(name, options)
        },

        set: function (name, value, options) {
            $.cookies(name, value, // somehow options & defaultOptions are passed in and merged here)
        },
    };
});

然而,这可能是完全错误的。就像我说的,我是 JS 的新手,所以我很迷茫。任何帮助将不胜感激!

标签: javascriptnode.jsvue.jswrappernuxt.js

解决方案


我认为你不需要一个类——一个简单的包装函数可能会满足你的需要。以下是如何创建一个小工厂函数来创建绑定到特定上下文的包装器:

function makeSetCookie($) {
  return function(name, value, options) {
    const defaultOptions = {
      sameSite: 'lax',
      secure: true
    }; 

    $.set(name, value, Object.assign(defaultOptions, options));
 }
}

const setCookie = makeSetCookie(this.Vue /* or whatever */);
// and now you can use setCookie wherever

调用者可以传递或不传递options参数的值。该行将Object.assign(defaultOptions, options)所有键/值从 复制optionsdefaultOptions,如果它们出现在 defaultOptions (sameSite,secure)中,则覆盖所有键options。如果options为 null 或未定义,那很好 - 返回的值将只是defaultOptions. 更多信息:https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign


推荐阅读