如何在Node ExpressJS中返回获取请求中的随机数据?

我已经build立了一个快速路线,我想返回一个随机化的string基于给定的字符。

API / practice.js

const express = require('express'); const router = express.Router(); function randomChar(charArray) { //returns random character based of character array return charArray[Math.floor(Math.random() * (charArray.length))]; } function exerciseGenerator(charArray) { //returns randomized string let string = ''; let i; for (i = 0; string.length < 100; i += 1) { string += randomChar(charArray); // insert space at random if (string.slice(-2) !== ' ' && Math.random() < 0.3 && string.length < 100) { string += ' '; } } return string; } const exercises = { items: [ { id: 0, name: 'title 0', string: ['d','f'], }, { id: 1, name: 'title 1', string: ['f', 'j'], }, ], }; // specific routing with parameters router.get('/:id', (req, res) => { let exercise = exercises.items[req.params.id]; if (exercise.string.constructor === Array) { exercise.string = exerciseGenerator(exercise.string); } res.json({ api: exercise }); }); module.exports = router; 

所以向localhost发送一个请求:3000 / api / practice / 0返回这个例子:

“df df dfdf fddfdfd dd d ddff f”

现在这是应该如何工作,但有一个警告:响应是在随后的调用给予相同的随机string。 只有当我重新启动服务器,我得到一个新的随机string。 显然,我认为它的工作原理并不是它的真正作用。

为什么会发生这种情况,我该如何克服这个问题?

问题是你在第一个请求上覆盖了exercises.items[0].string ,并将数组的types从一个数组改为一个string,因为每个下一个请求都会返回相同的结果。

你应该删除条件: if (exercise.string.constructor === Array)来得到它的工作:

 router.get('/:id', (req, res) => { let exercise = exercises.items[req.params.id]; let string = exerciseGenerator(exercise.string); res.json({ api: string}); }); 

我的最终解决scheme是添加一个更新函数并更新练习variables,如下所示:

 const update = (state, mutations) => Object.assign({}, state, mutations); router.get('/:id', (req, res) => { let exercise = exercises.items[req.params.id]; if (exercise.string.constructor === Array) { exercise = update(exercise, { string: exerciseGenerator(exercise.string) }); } res.json({ api: exercise }); });