FireRedASR Pro Node.js安装及环境配置构建语音识别RESTful API服务如果你正在开发一个需要语音识别功能的应用比如一个在线会议记录工具或者一个语音助手那么你很可能需要一个稳定可靠的后端服务来处理音频文件。FireRedASR Pro是一个强大的语音识别引擎但直接从前端调用它可能不太方便尤其是在处理文件上传、任务队列和结果返回这些复杂流程时。这时候一个用Node.js搭建的RESTful API服务就成了完美的“中间人”。它负责接收前端的音频文件交给FireRedASR Pro处理然后再把识别好的文字结果返回给前端。整个过程清晰、安全也方便你管理。今天我就带你从零开始在服务器上配置好Node.js环境并一步步搭建起这个轻量级的API服务。即使你之前没怎么接触过Node.js的后端开发跟着做下来也能搞定。1. 环境准备安装Node.js与npm万事开头难但安装Node.js其实很简单。它是我们整个服务的运行基础而npmNode Package Manager则是我们安装各种工具库的得力助手。1.1 在Linux服务器上安装Node.js推荐使用NodeSource维护的安装脚本它能帮你安装指定版本且比较稳定。这里我们安装当前的长期支持LTS版本。打开你的服务器终端依次执行以下命令# 首先更新系统包管理器以Ubuntu/Debian为例 sudo apt update sudo apt upgrade -y # 安装一些必要的编译工具 sudo apt install -y curl wget # 使用NodeSource脚本安装Node.js 18.x LTS版本 curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - sudo apt-get install -y nodejs安装完成后验证一下是否成功node --version npm --version如果终端分别输出了类似v18.17.0和9.6.7的版本号恭喜你第一步已经完成了。1.2 初始化你的项目接下来我们创建一个专门的项目目录来存放代码。# 创建一个项目文件夹名字可以自定比如 asr-api-server mkdir asr-api-server cd asr-api-server # 初始化一个新的Node.js项目这会生成一个package.json文件 npm init -y执行npm init -y后你会看到目录下多了一个package.json文件。它是你项目的“身份证”和“菜单”记录了项目信息以及依赖了哪些第三方库。2. 搭建API服务骨架引入Express框架Node.js本身就能创建HTTP服务但使用Express框架会让这件事变得异常简单和高效。它提供了路由、中间件等强大功能是我们构建RESTful API的首选。2.1 安装Express在你的项目目录下运行npm install express这个命令会把Express框架下载并安装到项目的node_modules文件夹中同时在package.json的dependencies里记录下这个依赖。2.2 创建第一个API端点现在我们来创建服务的入口文件。在项目根目录下新建一个名为app.js的文件。// app.js const express require(express); const app express(); const port 3000; // 服务运行的端口号可以按需修改 // 一个最简单的测试接口用于验证服务是否启动成功 app.get(/, (req, res) { res.json({ message: FireRedASR Pro API 服务运行正常 }); }); // 启动服务监听指定端口 app.listen(port, () { console.log(API服务已启动正在监听 http://localhost:${port}); });代码写好了怎么运行呢回到终端执行node app.js如果看到终端输出API服务已启动正在监听 http://localhost:3000就说明服务跑起来了。你可以打开浏览器访问http://你的服务器IP:3000应该会看到返回的JSON消息。想让服务一直在后台运行即使关闭终端也不停止可以安装一个叫pm2的进程管理工具# 全局安装pm2 sudo npm install -g pm2 # 使用pm2启动你的app.js pm2 start app.js --name asr-api # 查看运行状态 pm2 status这样你的基础服务框架就搭建好了。按CtrlC可以停止当前用node app.js启动的服务。3. 核心功能实现处理文件上传与接口逻辑我们的API核心是接收音频文件。这里需要用到两个重要的中间件multer用于处理文件上传cors允许前端跨域请求。3.1 安装必要的依赖库在项目目录下一次性安装我们需要的库npm install multer cors axiosmulter专门处理multipart/form-data类型即文件上传的中间件。cors配置跨域资源共享让前端应用能顺利调用这个API。axios一个非常好用的HTTP客户端我们用它来向FireRedASR Pro的后端引擎发送请求。3.2 构建完整的语音识别接口让我们升级app.js实现一个完整的/api/recognize接口。// app.js const express require(express); const multer require(multer); const cors require(cors); const fs require(fs); const path require(path); const axios require(axios); // 用于调用FireRedASR Pro引擎 const app express(); const port 3000; // 启用CORS允许所有前端来源生产环境建议指定具体域名 app.use(cors()); // 配置multer用于接收前端上传的音频文件 // 这里设置文件存储在 uploads/ 目录下并保留原始文件名 const storage multer.diskStorage({ destination: function (req, file, cb) { // 确保上传目录存在 const uploadDir uploads/; if (!fs.existsSync(uploadDir)) { fs.mkdirSync(uploadDir); } cb(null, uploadDir); }, filename: function (req, file, cb) { // 用时间戳原文件名来避免重名 const uniqueSuffix Date.now() - Math.round(Math.random() * 1E9); cb(null, uniqueSuffix - file.originalname); } }); // 创建multer实例只接受音频文件 const upload multer({ storage: storage, fileFilter: (req, file, cb) { // 检查文件类型可以根据需要添加更多音频格式 const allowedMimes [audio/mpeg, audio/wav, audio/m4a, audio/x-m4a]; if (allowedMimes.includes(file.mimetype)) { cb(null, true); } else { cb(new Error(不支持的文件类型请上传音频文件如MP3, WAV), false); } }, limits: { fileSize: 50 * 1024 * 1024 } // 限制文件大小为50MB }); // 假设你的FireRedASR Pro引擎服务运行在本地5000端口 const ASR_ENGINE_URL http://localhost:5000/recognize; // 定义语音识别接口 app.post(/api/recognize, upload.single(audioFile), async (req, res) { try { // 1. 检查文件是否上传成功 if (!req.file) { return res.status(400).json({ error: 请上传音频文件 }); } console.log(收到文件: ${req.file.filename}, 路径: ${req.file.path}); // 2. 准备调用ASR引擎 // 这里需要根据FireRedASR Pro引擎实际的API要求来构造请求 // 例如它可能接受一个包含音频文件路径或二进制流的请求 const formData new FormData(); // 注意在Node.js环境中我们通常使用fs.createReadStream来发送文件 // 这里演示一个通用的axios调用示例具体参数需调整 const audioFileStream fs.createReadStream(req.file.path); // 3. 调用后端识别引擎 const engineResponse await axios.post(ASR_ENGINE_URL, { audio: audioFileStream // 可能还需要其他参数如语言模型、识别配置等 // language: zh-CN, // model: general }, { headers: { Content-Type: multipart/form-data } }); // 4. 获取识别结果 const recognitionResult engineResponse.data; // 5. 可选处理完成后删除临时上传的文件 fs.unlink(req.file.path, (err) { if (err) console.error(删除临时文件失败:, err); }); // 6. 将识别结果返回给前端 res.json({ success: true, fileId: req.file.filename, text: recognitionResult.text, // 假设引擎返回的JSON里包含text字段 confidence: recognitionResult.confidence, processingTime: recognitionResult.time }); } catch (error) { console.error(语音识别处理失败:, error); // 清理可能已上传的文件 if (req.file fs.existsSync(req.file.path)) { fs.unlinkSync(req.file.path); } res.status(500).json({ success: false, error: 语音识别服务处理异常, detail: error.message }); } }); // 健康检查接口 app.get(/health, (req, res) { res.json({ status: UP, service: FireRedASR Pro API Gateway }); }); app.listen(port, () { console.log(FireRedASR Pro API网关服务运行中端口: ${port}); console.log(文件上传目录: ${path.join(__dirname, uploads)}); });这段代码做了几件关键事配置了multer来接收前端以audioFile为字段名上传的音频文件并保存到uploads/文件夹。创建了一个POST /api/recognize接口。在接口里我们尝试将接收到的文件转发给假设运行在localhost:5000的FireRedASR Pro引擎。拿到引擎的识别结果后再整理成结构化的JSON返回给前端。添加了错误处理确保出问题时前端能收到明确的错误信息。重要提示你需要根据 FireRedASR Pro 引擎真实的API文档来调整axios.post部分的请求格式。它可能要求不同的参数名、请求头或数据格式。4. 测试与优化让服务更健壮服务写好了得测试一下它是否工作正常。我们可以使用curl命令或者更直观的图形化工具Postman来测试。4.1 使用Postman测试接口打开Postman创建一个新的POST请求地址填http://你的服务器IP:3000/api/recognize。在Body选项卡中选择form-data。添加一个key名字设为audioFile必须和代码中的upload.single(audioFile)匹配类型选择File。在Value栏里点击“Select Files”选择一个本地的MP3或WAV音频文件。点击“Send”发送请求。如果一切正常你应该会收到一个包含识别文本的JSON响应。如果失败请查看终端里Node.js服务的错误日志来排查问题。4.2 一些实用的优化建议一个能上生产环境的服务还需要考虑更多环境配置不要把像端口号、引擎地址这样的配置硬编码在代码里。可以使用dotenv库从.env文件读取。npm install dotenv然后在项目根目录创建.env文件PORT3000 ASR_ENGINE_URLhttp://localhost:5000/recognize UPLOAD_DIRuploads在app.js开头加载配置require(dotenv).config(); const port process.env.PORT || 3000; const ASR_ENGINE_URL process.env.ASR_ENGINE_URL;日志记录使用winston或morgan库来记录详细的访问日志和错误日志方便后期维护。请求验证与限流对上传的文件大小、类型做更严格的检查。对于公开接口可以考虑使用express-rate-limit来限制单个IP的请求频率防止滥用。错误处理中间件可以编写一个统一的错误处理中间件捕获所有未被处理的异常给前端返回一致的错误格式。5. 总结跟着上面的步骤走一遍你应该已经成功在服务器上配置好了Node.js环境并拥有了一个能够接收音频文件、调用语音识别引擎、返回文字结果的RESTful API服务了。这个服务虽然轻量但具备了核心的文件上传、异步处理和接口响应的能力。实际部署时记得根据FireRedASR Pro引擎的具体API文档调整调用方式并把服务端口、文件存储路径这些配置信息管理好。这个Node.js中间层的好处是它把复杂的音频处理逻辑封装在后端给前端提供了一个干净、简单的HTTP接口大大降低了前后端联调的复杂度。接下来你可以为这个API服务添加用户认证、任务状态查询、批量处理等更多功能让它更加强大和实用。希望这个教程能帮你顺利搭建起语音识别应用的后端桥梁。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。