module.export 和全局对象
module.export and global objects
我很困惑。
有时,当我的网络 api 接收到数据时,它会在对象之间混合数据,在我看来,文件中的全局对象实际上是持久的..
这里是代码的基本布局
handlers.js
const something = require('./otherfile')
let handlers ={}
handlers.customers = function (data, callback) {
let acceptableMethods = ['post'];
if (acceptableMethods.indexOf(data.method) > -1) {
handlers._customers[data.method](data, callback);
} else {
callback(405);
}
};
handlers._customers = {}
handlers._customers.post = async function (data, callback) {
customer.new(data);
callback(200, 'success')
}
otherfile.js
let contacts_list = [];
let accountData = {};
module.exports = something = {
new: {
dostuff: async function (data) {
// update and reference global objects here..
accountData.name = data.name;
accountData.otherProperty = await somefunction(data.prop)
}
}
}
我预计,因为它需要一个导出模块,所以每次它调用导出模块时,它都会被视为它自己的对象,但是,似乎该对象没有被视为唯一的,而是被部分覆盖 'randomly'。这向我暗示我可以导出一个变异对象,例如跨文件的数组
我说得对吗,全局是跨多个请求持久化的?
在导出对象中设置全局变量会以任何方式影响该对象的行为吗?在这种情况下,我不希望此数据发生变异。
提前感谢您的建设性批评和指导:)
[重组您的代码,以便在每次请求时创建一个新对象。模块在第一个请求时被缓存,因此您的所有变量和对象属性都将在调用中保留。
// handler.js
const somethingFactory = require('./otherfile')
module.exports = function(){
let handlers = {}
const something = somethingFactory();
handlers.customers = function (data, callback) {
let acceptableMethods = ['post'];
if (acceptableMethods.indexOf(data.method) > -1) {
handlers._customers[data.method](data, callback);
} else {
callback(405);
}
};
handlers._customers = {}
handlers._customers.post = async function (data, callback) {
customer.new(data);
callback(200, 'success')
}
return handlers;
};
otherfile.js
module.exports = function(){
let contacts_list = [];
let accountData = {};
return {
new: {
dostuff: async function (data) {
// update and reference global objects here..
accountData.name = data.name;
accountData.otherProperty = await somefunction(data.prop)
}
}
}
};
我很困惑。
有时,当我的网络 api 接收到数据时,它会在对象之间混合数据,在我看来,文件中的全局对象实际上是持久的..
这里是代码的基本布局
handlers.js
const something = require('./otherfile')
let handlers ={}
handlers.customers = function (data, callback) {
let acceptableMethods = ['post'];
if (acceptableMethods.indexOf(data.method) > -1) {
handlers._customers[data.method](data, callback);
} else {
callback(405);
}
};
handlers._customers = {}
handlers._customers.post = async function (data, callback) {
customer.new(data);
callback(200, 'success')
}
otherfile.js
let contacts_list = [];
let accountData = {};
module.exports = something = {
new: {
dostuff: async function (data) {
// update and reference global objects here..
accountData.name = data.name;
accountData.otherProperty = await somefunction(data.prop)
}
}
}
我预计,因为它需要一个导出模块,所以每次它调用导出模块时,它都会被视为它自己的对象,但是,似乎该对象没有被视为唯一的,而是被部分覆盖 'randomly'。这向我暗示我可以导出一个变异对象,例如跨文件的数组
我说得对吗,全局是跨多个请求持久化的? 在导出对象中设置全局变量会以任何方式影响该对象的行为吗?在这种情况下,我不希望此数据发生变异。
提前感谢您的建设性批评和指导:)
[重组您的代码,以便在每次请求时创建一个新对象。模块在第一个请求时被缓存,因此您的所有变量和对象属性都将在调用中保留。
// handler.js
const somethingFactory = require('./otherfile')
module.exports = function(){
let handlers = {}
const something = somethingFactory();
handlers.customers = function (data, callback) {
let acceptableMethods = ['post'];
if (acceptableMethods.indexOf(data.method) > -1) {
handlers._customers[data.method](data, callback);
} else {
callback(405);
}
};
handlers._customers = {}
handlers._customers.post = async function (data, callback) {
customer.new(data);
callback(200, 'success')
}
return handlers;
};
otherfile.js
module.exports = function(){
let contacts_list = [];
let accountData = {};
return {
new: {
dostuff: async function (data) {
// update and reference global objects here..
accountData.name = data.name;
accountData.otherProperty = await somefunction(data.prop)
}
}
}
};