我的服务器文件中有一个对象构造函数,用于构造包含某些功能的对象。当我在server.js文件中使用Express发送对象并在app.js文件中使用axios get请求对其进行检索时,该对象的功能丢失了。为什么是这样?如何与对象发送/获取功能?
我正在使用React(尽管我认为这并不重要)。这些功能使我可以更新对象的数据。该对象应该充当其他站点的文件夹。
const sites = []; //array that holds objects
//this function generates a random ID for the object
const makeID = function () {
return '_' + Math.random().toString(36).substr(2, 9);
};
//Here is my object (site constructor)
const makeSite = (customerInfo={}, parent=undefined, isMain=false, isFile=false, subsites=[]) => {
const site = {
customerInfo,
isMain,
subsites,
isFile,
id: makeID(),
get title() {
if (!this.isMain) {
return `${parent.title}/${this.customerInfo.name}`;
} else {
return this.customerInfo.name;
}
},
addSubsites(subsite_arr) {
this.subsites += subsite_arr;
}
};
return site;
}
//Here is a function that allows me to make a default object and add it to the array of sites
publishSite = (info) => {
const newSite = makeSite(info, undefined, true, false); //calling constructor
newSite.addSubsites([ //default subsites
makeSite({name: 'Scope'}, newSite),
makeSite({name: 'Notes'}, newSite),
makeSite({name: 'Material'}, newSite),
makeSite({name: 'Changes'}, newSite),
])
sites.unshift(newSite);
}
publishSite({name: "RED"}); //adds object to sites array
app.listen(port, () => console.log(`Listening on port ${port}`));
// create a GET route
app.get('/sites', (req, res) => {
res.send(sites); //sends sites array (see top of code)
});
//function that gets sites array and logs it to console/updates state
async refreshSites() {
const {data} = await Axios.get('/sites');
console.log(data);
this.setState({sites: data})
}
[{…}]
0:
customerInfo: {name: "RED"}
id: "_pppxh5zy6"
isFile: false
isMain: true
subsites: (4) [{…}, {…}, {…}, {…}]
title: "RED"
__proto__: Object
length: 1
除方法外,它具有所有信息,调用方法会引发错误。还值得注意的是,即使直接更改对象customerInfo.name,该对象的'title'属性也不会改变。如何发送对象的方法并在app.js(例如addSubsites)中调用它们?
答案 0 :(得分:0)
您无法通过http协议发送函数。如果您希望使用相同的构造函数和方法,我的提示是,将所有这些代码移动到没有任何环境(nodejs,浏览器)引用的文件中,并在两个位置使用相同的文件。