javascript - 如何为 Node.js 插件创建包装类

标签 javascript node.js vue.js wrapper nuxt.js

所以我是 JavaScript 新手,并且有一个项目正在使用 Node.js cookies module found here.我已经能够创建 cookie 并正确设置它们,如下所示:

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

但是,我想创建一个包装函数/类,以便我可以将 sameSite: 'lax'secure: 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 新手,所以我很迷茫。任何帮助将不胜感激!

最佳答案

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

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) 行将所有键/值从 options 复制到 defaultOptions,覆盖 defaultOptions 中已有的任何键(sameSite、安全)(如果它们出现在选项中)。如果 options 为 null 或未定义,那没关系 - 返回的值将只是 defaultOptions。更多信息请点击:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

关于javascript - 如何为 Node.js 插件创建包装类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60121161/

相关文章:

javascript - Three.js 水平 PlaneGeometry at x=0 y=0 z=0

node.js - 在项目数组上使用 Sequelize 创建/更新

javascript - 如何在 Vue 中获取数据之前抑制 "Undefined"错误

javascript - Vue : Rendered list show selected checkboxes

html - Vuetify <v-data-table> 自定义 <th> header

javascript - 20 * 20 亿怎么会像大 O 表示法中的 2 * 3 那么长?

javascript - angularjs 两个函数的替代方案(欧芹和重置)

javascript - 在 gulpfile.js 中设置工作目录?

c++ - V8 回调,用数字代替字符串

javascript - 如何显示从 nodejs 服务器获取的缓冲区数据中的视频