练习背景
完成一个随机字符串发布页面。十秒内打开页面,会看到相同的7-14位随机字符串。超过时间,字符串会变化。已经出现过的字符串不可追溯。
技术框架
-
nodejs+express承载html页面,在打开时,向后台请求功能,返回一个字符串,并把该字符串显示在页面上。
-
后台功能模块生成随机字符串,返回。超出十秒后访问此功能,则重新生成字符串并重新计时。
练习内容
-
尽量独立思考完成,如果有困难,阅读参考代码,完成练习,理解完整思路。
-
理解参考代码中随机数的生成,查询资料,对比Math.radom。
参考代码
代码不完整,仅供参考。
代码1
// 记录模块初始化时的时间戳,用于判断是否需要刷新随机字符串
let mynow = Date.now();
// 存储当前的随机字符串
let mystr = secureRandomString();
/**
* 生成安全的随机字符串
* 使用加密级别的随机数生成器(crypto.getRandomValues)
* @returns {string} 长度在7-14之间的随机字符串
*/
function secureRandomString() {
// 字符集:大写字母、小写字母、数字
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
// 生成7-14之间的随机长度
const length = crypto.getRandomValues(new Uint8Array(1))[0] % 8 + 7;
// 生成指定长度的加密安全随机值
const randomValues = crypto.getRandomValues(new Uint8Array(length));
// 将随机值映射到字符集并拼接成字符串
return Array.from(randomValues, val => chars[val % chars.length]).join('');
}
/**
* 获取随机字符串,每10秒自动刷新一次
* @returns {string} 当前的随机字符串
*/
export function get_string() {
// 计算距离上次刷新的时间差(毫秒)
let t = Date.now() - mynow;
// 如果超过10秒,则刷新随机字符串
if (t > 10 * 1000) {
mystr = secureRandomString();
//更新刷新时间
mynow = Date.now();
}
return mystr;
}
代码2
function add_str(x)
{
let a=document.querySelector("body");
let b=document.createElement("div");
b.textContent=x;
a.appendChild(b);
}
function f2() {
let myurl2 = "http://127.0.0.1:3000/test2";
fetch(myurl2)
.then(r =>r.text())
.then(r => add_str(r));
}
f2();
浙公网安备 33010602011771号