使用http get请求获取javascript对象的方法?

时间:2019-07-16 03:59:52

标签: javascript json express http axios

  

我的服务器文件中有一个对象构造函数,用于构造包含某些功能的对象。当我在server.js文件中使用Express发送对象并在app.js文件中使用axios get请求对其进行检索时,该对象的功能丢失了。为什么是这样?如何与对象发送/获取功能?

     

我正在使用React(尽管我认为这并不重要)。这些功能使我可以更新对象的数据。该对象应该充当其他站点的文件夹。

Server.js

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)
});

App.js

//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)中调用它们?

1 个答案:

答案 0 :(得分:0)

您无法通过http协议发送函数。如果您希望使用相同的构造函数和方法,我的提示是,将所有这些代码移动到没有任何环境(nodejs,浏览器)引用的文件中,并在两个位置使用相同的文件。