如何为网站的每个入口创建一个全局变量?

how to create a global variable for every entrance to the website?

我有一个工作正常的全局数组,并在我点击表单中的提交后存储用户选择的图像的 URL。

问题是当我想提交另一个表单时,全局数组仍然会有上次提交的 URL。

我想做的是为每个用户创建一个数组来存储他的 URL,一旦他点击提交,该数组将被删除或删除。所以如果有多个用户使用相同的功能,他们每个人都会有自己的数组来存储他的URL的

我该怎么做?

这是我尝试过的方法,但是当我点击表单页面上的提交时,没有任何反应

首先,这是用户选择图片returnsurl的方法,该方法存在于两个文件夹中(both/file.js)

storeUrlInDatabaseSS: function( url ) {
    check( url, String );
    Modules.both.checkUrlValidity( url );

    try {
      return url;
     } catch( exception ) {
      return exception;
    }
  }

然后我在客户端创建了会话变量 (client/file.js)

Session.set("screenshots", []);
Session.set("i", 0);

var screenshots = Session.get("screenshots");
var i = Session.get("i");

这里我将 url 存储在数组

let _addUrlToDatabaseSS = ( url ) => {
  screenshots[i++] = url;
  Session.set("screenshots", screenshots);
};

并且正在使用 Meteor Collection Hook Package

我添加了这两行代码,用户按下提交后应该会兴奋,它们存在于"client/files.js"目录

Products.before.insert(function (userId, doc) {
  doc.screenShots = Session.get("screenshots");
});

现在每当我点击提交时什么都没有发生,我认为问题是因为这里集合的 screenShots 属性中实际上没有存储任何内容

  screenShots: {
    type: [String]
  },

当我像下面的代码一样默认将 screenShots 属性设置为空数组时,提交按钮有效

  screenShots: {
    type: [String],
    autoValue: function() {
      return [];
    }
  },

我尝试使用另一种方式 AutoForm.hooks

AutoForm.hooks({
    submitPostForm: {
        before: {
            insert: function(doc) {
                doc.$set.screenShots = Session.get("screenshots");
            }
        }
    }
});

这是我在 .html 文件中的表格

{{> quickForm collection="Products" id="submitPostForm"
  type="method" meteormethod="submitPost" omitFields="createdAt, previewImage, screenShots, sourceCode, userID"}}

这是用户提交表单后触发的方法,它存在于服务器端。

submitPost: function (app) {
    // Console.log('new App:', app);
    check(app, {
        title: String,
        description: String,
        category: String,
        price: Number
    });
    Products.insert(app);
}

出于某种原因,我的 before 钩子不起作用,我不明白为什么! 我在这里做错了什么?

为每个用户创建全局数组的方法之一是使用 Session。这样也可以 持久化 跨应用程序的数据(仅客户端)。

使用Session的简单方法是:

  1. Session 中创建一个名为 url_list 的数组:

    Session.set("url_list", []);

  2. Session检索数组:

    var url_list = Session.get("url_list");

  3. 更改 url_list:

    url_list.push(someData);

  4. 再次将url_list存储在Session中:

    Session.set("url_list", url_list);

注意Session只能在客户端使用,所有相关代码都在客户端。

More about Session.

将数据保存到服务器端:

url_list 保存到服务器的最佳方法是将新文档插入到包含 Session 数据的数据库集合中。

insertToDB = function() {

    var url_list = Session.get('url_list');
    Products.insert({
        'url_list': url_list
    });
    Session.set('url_list', []); // To empty the client-side list

}