Rumah > Soal Jawab > teks badan
P粉0193532472023-08-27 11:31:26
Masalahnya ialah NodeJS dan pelayar kedua-duanya mempunyai modul yang dipanggil crypto
(yang melaksanakan standard crypto
的模块(实现了webcrypto标准),它们是兼容的,但需要以不同的方式访问,因为在浏览器中它是由不存在于NodeJS中的window
webcrypto
yang tidak wujud dalam NodeJS. window
ialah konteks lalai. crypto
,因此会抛出错误。它不知道/不关心这个模块在浏览器中也存在,但是作为window.crypto
dalam penyemak imbas. vite.config.js
, tetapi saya tidak begitu biasa dengannya.
Saya menghasilkan penyelesaian berikut, yang berfungsi dalam kedua-dua persekitaran:
function getCrypto() { try { return window.crypto; } catch { return crypto; } }
async function hash(token) { const compatibleCrypto = getCrypto(); const data = new TextEncoder().encode(token); const byteHash = await compatibleCrypto.subtle.digest('SHA-256', data); const arrayHash = Array.from(new Uint8Array(byteHash)); const hexHash = arrayHash .map(b => b.toString(16).padStart(2, '0')) .join('') .toLocaleUpperCase(); return hexHash; }🎜Kini fungsi ini berfungsi dalam kedua-dua persekitaran. 🎜