javascript - 功能仅在服务器重新启动时有效

标签 javascript node.js

我有一个在运行 Node 服务器时可以使用的函数。当第二次刷新页面时,会抛出错误。当重新启动我的 Node 服务器并第三次刷新页面时,该功能将再次起作用。

我有一群人

const members = [{
    imgUrl: 'resources/members/foobar.png',
    name: 'Foo Bar',
    focus: [0, 1, 2, 4, 5]
}, {
    imgUrl: 'resources/members/barfoo.png',
    name: 'Bar Foo',
    focus: [0, 1, 2, 4, 5]
}, {
    imgUrl: 'resources/members/johndoe.png',
    name: 'John Doe',
    focus: [1, 3, 5]
}];

我想修改这个数组

const targetMembers = members.map(member => {
    member.focus = member.focus.map(skillIndex => skills[skillIndex]).join(', ');
    return member;
});

我得到的错误是

TypeError: member.focus.map is not a function
    at members.map.member (C:\Users\...\...\server\routes\main.js:6:37)
    at Array.map (<anonymous>)
    at router.get (C:\Users\...\...\server\routes\main.js:5:35)
    at Layer.handle [as handle_request] (C:\Users\...\...\node_modules\express\lib\router\layer.js:95:5)
    at next (C:\Users\...\...\node_modules\express\lib\router\route.js:137:13)
    at Route.dispatch (C:\Users\...\...\node_modules\express\lib\router\route.js:112:3)
    at Layer.handle [as handle_request] (C:\Users\...\...\node_modules\express\lib\router\layer.js:95:5)
    at C:\Users\...\...\node_modules\express\lib\router\index.js:281:22
    at Function.process_params (C:\Users\...\...\node_modules\express\lib\router\index.js:335:12)
    at next (C:\Users\...\...\node_modules\express\lib\router\index.js:275:10)

我不知道为什么这只适用于服务器重新加载。我在这里提供一个小片段

const members = [{
  imgUrl: 'resources/members/foobar.png',
  name: 'Foo Bar',
  focus: [0, 1, 2, 4, 5]
}, {
  imgUrl: 'resources/members/barfoo.png',
  name: 'Bar Foo',
  focus: [0, 1, 2, 4, 5]
}, {
  imgUrl: 'resources/members/johndoe.png',
  name: 'John Doe',
  focus: [1, 3, 5]
}];

const skills = [
  'Skill 0',
  'Skill 1',
  'Skill 2',
  'Skill 3',
  'Skill 4',
  'Skill 5'
];

const targetMembers = members.map(member => {
  member.focus = member.focus.map(skillIndex => skills[skillIndex]).join(', ');
  return member;
});

console.log(targetMembers);

我将每个成员的技能存储到另一个数组中,并希望在渲染模板时通过技能键(索引)映射他们的技能。

最佳答案

问题出在声明上

member.focus = member.focus.map(skillIndex => skills[skillIndex]).join(', ');

首次执行 - member.focus 是一个数组,数组具有函数map 并且它会执行。但是,执行后,您已将 member.focus 更改为字符串

第二次执行 - member.focus 是一个 String 并且 String 没有函数映射,因此会出现错误。

关于javascript - 功能仅在服务器重新启动时有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52115516/

相关文章:

javascript - 在javascript中多次过滤

javascript - 错误 : ENOENT: no such file or directory, 打开 './views/s.ejs' Nodejs Express

javascript - Promise 范围在执行时不同

javascript - 使用 Socket.io 的异步模块加载 (AMD)

javascript - 动态创建的 Javascript 表的问题

c# - 在jquery中加载大数据

javascript - 按回车离开 ContentEditable 框

javascript - JSON:查询连接表不起作用(Cordova Mobile)

node.js - 是否可以在用户提供正确的详细信息后仅允许 vorpal 命令

node.js - 使用 Firebase 获取 downloadURL 不断抛出错误 'XMLHttpRequest is not defined'