首页 > 解决方案 > 如何从 node.js 上的另一个 js 文件导入对象数组?

问题描述

大家好! 我想用来自用户的数据创建对象数组。所以我做了类似的东西;

index.js

var create_users = require("./createusers.js");
io.on('connection', function(socket) {
  socket.on('all_left_datas', ({name,role,players}) => {

    var roomCode = genRoomCode.generate({length:4,numbers:true});
    create_users.createUser(roomCode,name,role,socket.id);

socket.join(roomCode);


if(io.sockets.in(roomCode)) {
   console.log(create_users.users[socket.id].name + ' joined the room');
    io.emit('userNames', name); }

创建用户.js

module.exports.users = {};

  module.exports = {
    createUser: function(roomCode,name,role,socketID) {
    module.exports.users[socketID] = {
    roomCode: roomCode,
    name: name,
    role: role,
    userID: socketID
  };
} };

但是当我尝试使用它时,我得到了那个错误; TypeError:无法设置未定义的属性'_aEg_PDxugjTMxZHAAAD' 我该怎么办?

标签: javascriptnode.jsarrayssocket.io

解决方案


当您再次分配时,您将覆盖对象的原始定义。当其他东西被分配给它时,曾经存在的东西会被丢弃。你需要:usersmodule.exportsmodule.exports

// createusers.js
module.exports = {
    users: {},
    createUser: function (roomCode, name, role, socketID) {
        module.exports.users[socketID] = {
            roomCode: roomCode,
            name: name,
            role: role,
            userID: socketID
        };
    }
};

您还可以考虑使用现代语法和速记属性来使代码更简洁:

createUser(roomCode, name, role, userID) {
    module.exports.users[userID] = { roomCode, name, role, userID };
}

推荐阅读