如何用Nodejs将文本文件内容存入字典并实现简易翻译服务
实现思路
- 服务启动时预加载词库并构建翻译映射表,避免每次请求重复读取文件
- 解析请求URL获取翻译方向和待翻译内容
- 遍历待翻译单词匹配映射表,拼接返回翻译结果
完整可运行代码
const http = require('http'); const fs = require('fs'); const url = require('url'); const hostname = '127.0.0.1'; const port = 5000; // 服务启动时预加载词库构建翻译字典 const translateMap = {}; // 同步读取词库文件 const dictContent = fs.readFileSync('Spanish.txt', 'utf8'); // 按行拆分文本 const lineList = dictContent.split('\n'); // 遍历每行构建映射表 for (let line of lineList) { line = line.trim(); if (!line) continue; // 跳过空行 // 按TAB分割成英文和西班牙文 const [enWord, esWord] = line.split('\t'); if (enWord && esWord) { translateMap[enWord.toLowerCase()] = esWord; } } const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain; charset=utf-8'); // 解析URL路径 const pathname = url.parse(req.url).pathname; const pathSegments = pathname.split('/').filter(seg => seg); // 匹配翻译请求路径格式 /translate/e2s/xxx if (pathSegments.length === 3 && pathSegments[0] === 'translate' && pathSegments[1] === 'e2s') { // 提取待翻译内容,把+替换为空格,拆成单词 const queryStr = decodeURIComponent(pathSegments[2]); const wordList = queryStr.replaceAll('+', ' ').split(' '); // 遍历单词翻译 const translatedList = wordList.map(word => { return translateMap[word.toLowerCase()] || word; }); // 返回翻译结果 res.end(translatedList.join(' ')); return; } // 非翻译请求返回提示 res.end('请访问 /translate/e2s/[待翻译内容] 使用翻译服务'); }); server.listen(port, hostname, () => { console.log(`Server running at http://${hostname}:${port}/`); console.log(`词库加载完成,共加载${Object.keys(translateMap).length}条词汇`); });
关键修改说明
- 把词库读取逻辑移到了服务启动阶段,只用执行一次,性能更高
- 修正了词库分割逻辑:先按行拆分,每行再按TAB分割得到词汇对,存入
translateMap字典 - 移除了原来请求逻辑开头的
res.end('Hello World'),避免还没处理逻辑就返回响应 - 增加了URL路径解析逻辑,识别翻译请求的路径参数,把待翻译内容拆分后逐个匹配字典
- 未匹配到的单词会直接返回原词,避免内容缺失
内容的提问来源于stack exchange,提问作者umijs
相关产品推荐
相关产品推荐

