You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用NodeJS和Postman执行MySQL 9.0的JavaScript存储函数?

问题排查与修复方案

你的代码存在几个关键问题,导致无法正确获取求和结果,以下是逐一修复的步骤:

1. 修正路由引入与请求体解析

  • try是JavaScript关键字,不能用作变量名,需修改路由文件的引入方式
  • Express默认不会解析JSON请求体,需添加express.json()中间件才能读取req.body的内容

修正后的index.js:

const express = require('express');
const cors = require('cors');
const connection = require('./db/connection');
// 修正变量名,避免使用关键字
const sumRouter = require('./try');

const app = express();

app.use(cors());
// 添加JSON请求体解析中间件
app.use(express.json());

// 使用正确的路由变量
app.use('', sumRouter);

app.listen(3000, "localhost", () => {
    console.log("Server is running on port 3000");
});

2. 修正SQL函数调用逻辑

你创建的自定义函数名为MySum,但SQL语句里误用了MySQL内置的sum()聚合函数,同时需要给结果字段设置别名,避免解析动态字段名的问题。

修正后的try.js:

const express = require('express');
const router = express.Router();
const connection = require('./db/connection');

router.post('/sum', (req, res) => {
    const {num1, num2} = req.body;
    if(!num1 || !num2){
        return res.status(400).json({ error: 'The numbers are required' });
    } else {
        // 调用自定义的MySum函数,添加别名total_sum
        const sql = "SELECT MySum(?, ?) AS total_sum";
        const values = [num1, num2];
        connection.execute(sql, values, (err, results) => {
            if (err) {
                // 返回具体错误信息便于调试
                return res.status(500).json({ error: 'Error while executing the function', detail: err.message });
            } else {
                // 通过别名获取结果
                res.status(200).json({ message: `The sum is ${results[0].total_sum}` });
            }
        });
    }
});

module.exports = router;

3. 确认MySQL社区版的JavaScript功能支持

MySQL 9.0开始,社区版正式引入了基于GraalVM的JavaScript存储程序功能,无需企业版。但需确保你的MySQL实例已启用相关组件:

  • 检查mysql-js插件是否已加载:执行SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'mysql_js';
  • 如果未加载,可执行INSTALL PLUGIN mysql_js SONAME 'mysql_js.so';(Linux)或INSTALL PLUGIN mysql_js SONAME 'mysql_js.dll';(Windows)加载插件

额外调试建议

  • 在Postman请求时,确保请求体使用raw -> JSON格式,传入{"num1": 1, "num2": 2}这样的有效数据
  • 查看Node.js控制台的错误日志,以及MySQL的错误日志,定位具体执行问题

内容的提问来源于stack exchange,提问作者user26627078

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 17:43:16