typescript 在JSON服务器中向端点处的数组追加值

wfveoks0  于 2023-03-31  发布在  TypeScript
关注(0)|答案(1)|浏览(270)

我正在使用JSON server npm应用程序,我正在为一个简单的应用程序定义端点。我的意图是创建一个POST请求端点,它更新或替换数组中的单个元素。为此,我已经实现了这段代码。

server.use((req, res, next) => {

    const TEST_CASE_PATH = 'tf-test-cases'

    if (req.path == `/${TEST_CASE_PATH}`){

        else if (req.method === 'POST') {
            console.log('MADE A POST REQUEST!')

            const newTC = req.body as TestCase
            console.log(newTC)
            let testCases = JSON.parse(JSON.stringify(router.db.get(TEST_CASE_PATH))) as TestCase[]

            for (let i = 0; i < testCases.length; i++){
                const testCase = testCases[i];
                if (newTC.uuid == testCase.uuid){
                    testCases[i] = newTC;
                    // update db old test case with new test case
                    // send user new test case as response
                    return;
                }
            }

            testCases.push(newTC)
            // update db with new test case
            // send user new test case as response
            res.send(testCases); 
            return;
        }

        else if (req.method == 'DELETE') {
            console.log('MADE A DELETE REQUEST!')
            res.send({req: "delete"})

        }
    }

    else {
        // Continue to JSON Server router
        next()
    }
})

如果这不是很清楚我打算做什么,我的目标是在端点TEST_CASE_PATH处查询数据库,查找请求主体中TestCase对象的uuid是否等于任何现有的,如果是,则替换它并将新的TestCase对象列表发布到数据库,否则,将新的TestCase推到列表并将新的列表发布到数据库。
我的问题是:我的数据库没有更新新的测试用例,响应是正确的,所以我确定添加/修改列表条目逻辑正在工作。我如何将更新的TestCase[]列表写入端点的数据库?
提前感谢。我希望解决方案不是微不足道的。我已经搜索了the repo以及其他堆栈溢出问题,但我似乎找不到答案。我没有选择,只能使用它作为一个简单的DB在工作。

dtcbnfnu

dtcbnfnu1#

找到解决方案:

if (req.path == '/tf-test-cases'){

    const TEST_CASE_PATH = 'tf-test-cases'

    else if (req.method === 'POST') {
        console.log('MADE A POST REQUEST!')

        const newTC = JSON.parse(JSON.stringify(req.body)) as TestCase
        let testCases = JSON.parse(JSON.stringify(router.db.get(TEST_CASE_PATH))) as TestCase[]

        for (let i = 0; i < testCases.length; i++){
            const testCase = testCases[i];
            if (newTC.uuid == testCase.uuid){
                console.log('updating tc')
                testCases[i] = newTC;
                // update db old test case with new test case
                router.db.set(TEST_CASE_PATH, testCases).write()
                // send user new test case as response
                res.send(newTC)
                return;
            }
        }

        testCases.push(newTC)
        // update db with new test case
        router.db.set(TEST_CASE_PATH, testCases).write()
        // send user new test case as response
        res.send(testCases); 
        return;
    }
}

相关问题