default·

js使用rust

js使用rust。
前端javascriptrust

安装 @napi-rs/cli

npm install -g @napi-rs/cli

创建项目

napi new my-project

写入以下内容到 my-project/src/lib.rs 文件:

#![deny(clippy::all)] use image::codecs::png::{CompressionType, FilterType, PngEncoder}; use image::Luma; use qrcode::{EcLevel, QrCode}; #[macro_use] extern crate napi_derive; #[napi] pub fn sum(a: i32, b: i32) -> i32 { a + b } #[napi] pub fn generate_qr_code(text: String) -> Result<Vec<u8>, napi::Error> { let qr = QrCode::with_error_correction_level(&text, EcLevel::L) .map_err(|e| napi::Error::new(napi::Status::Unknown, e.to_string()))?; let img_buf = qr.render::<Luma<u8>>().min_dimensions(200, 200).build(); let mut encoded_buf = Vec::with_capacity(512); let encoder = PngEncoder::new_with_quality( &mut encoded_buf, CompressionType::Default, FilterType::NoFilter, ); img_buf .write_with_encoder(encoder) .map_err(|e| napi::Error::new(napi::Status::Unknown, e.to_string()))?; Ok(encoded_buf) }

编译项目

cd my-project npm run build

使用项目

创建文件test.js

const express = require('express'); const utils = require('./index.js'); // 确保 index.js 中有 sum 和 generateQrCode 方法 const app = express(); const PORT = 3000; // 设置一个 API 接口生成 QR 码 app.get('/qrcode', (req, res) => { try { const data = utils.generateQrCode('https://www.google.com'); const buffer = Buffer.from(data); const base64Image = buffer.toString('base64'); const dataUrl = `data:image/png;base64,${base64Image}`; res.json({ qrcode: dataUrl }); } catch (error) { console.error(error); res.status(500).json({ error: '生成 QR 码时出错' }); } }); // 启动服务器 app.listen(PORT, () => { console.log(`服务正在运行,监听端口 ${PORT}`); });

运行项目

node test.js