Skip to content

后置脚本

后置脚本是在 SQL 语句执行之后运行的 JS 脚本

示例

关于 自定义错误状态码,参见JS类API中关于 HTTP 响应状态码 的描述

1. 自定义响应的数据结构

js

// 后置脚本中, ctx.resultObj 是 SQL 执行的结果

const newObj = {
    msg: "重新定义要返回的数据格式",
    // 此处需要深拷贝 `ctx.resultObj`, 否则后面再 赋值 给 `ctx.resultObj` 时会造成 循环引用, 对于循环引用, 是 无法JSON 序列化的, 会出错
    data: JSON.parse(JSON.stringify(ctx.resultObj))
}
ctx.resultObj.result = newObj

alt text 返回结果 alt text

2. 数据加密

js
    if (ctx.resultObj.err) {
        // SQL 执行失败, 直接返回
        return
    }

    const crypto = require('crypto');

    // 加密函数
    function aes128CbcEncrypt(data, key, iv) {
        const cipher = crypto.createCipheriv('aes-128-cbc', key, iv);
        let encrypted = cipher.update(data, 'utf8', 'hex');
        encrypted += cipher.final('hex');
        return encrypted;
    }

    // 解密函数
    function aes128CbcDecrypt(encryptedData, key, iv) {
        const decipher = crypto.createDecipheriv('aes-128-cbc', key, iv);
        let decrypted = decipher.update(encryptedData, 'hex', 'utf8');
        decrypted += decipher.final('utf8');
        return decrypted;
    }

    const key = Buffer.from('1234567890abcdef', 'utf8');  // 16 字节的密钥
    const iv = Buffer.from('0123456789abcdef', 'utf8');   // 16 字节的初始化向量

    // 示例用法
    // const data = '这是要加密的数据';

    // const encrypted = aes128CbcEncrypt(data, key, iv);
    // console.log('加密后的结果:', encrypted);

    // const decrypted = aes128CbcDecrypt(encrypted, key, iv);
    // console.log('解密后的结果:', decrypted);

    // RSA 加密

    const deData = aes128CbcEncrypt(JSON.stringify(ctx.resultObj.result), key, iv)

    ctx.resultObj.result = {
        message: "示例 使用aes加密数据",
        data: deData
    }

alt text 执行后返回 alt text