node / app_cppnode /server.js
bitterapricot's picture
add napi
dc21909
Raw
History Blame Contribute Delete
1.94 kB
const express = require('express');
const addon = require('./app_node_addon');
const app = express();
const PORT = process.env.PORT || 3000;
app.use(express.json());
// 健康检查
app.get('/health', (req, res) => {
res.json({ status: 'ok', service: 'node-napi' });
});
// 调用 N-API addon
app.post('/api/napi/hello', (req, res) => {
try {
const { name } = req.body;
const result = addon.hello(name || 'World');
res.json({ success: true, result });
} catch (error) {
res.status(500).json({ success: false, error: error.message });
}
});
// 调用 N-API addon 计算
app.post('/api/napi/add', (req, res) => {
try {
const { a, b } = req.body;
if (typeof a !== 'number' || typeof b !== 'number') {
return res.status(400).json({
success: false,
error: '参数必须是数字'
});
}
const result = addon.add(a, b);
res.json({ success: true, result });
} catch (error) {
res.status(500).json({ success: false, error: error.message });
}
});
// 复杂计算示例
app.post('/api/napi/compute', (req, res) => {
try {
const { numbers, operation } = req.body;
if (!Array.isArray(numbers)) {
return res.status(400).json({
success: false,
error: 'numbers 必须是数组'
});
}
let result;
switch (operation) {
case 'sum':
result = numbers.reduce((acc, num) => acc + num, 0);
break;
case 'average':
result = numbers.reduce((acc, num) => acc + num, 0) / numbers.length;
break;
default:
return res.status(400).json({
success: false,
error: '不支持的运算类型'
});
}
res.json({ success: true, result });
} catch (error) {
res.status(500).json({ success: false, error: error.message });
}
});
app.listen(PORT, () => {
console.log(`Node.js N-API 服务运行在端口 ${PORT}`);
});