route.ts 中的 NextResponse.json() 不起作用(下一个 js)

问题描述 投票:0回答:1

我想从一台服务器传输数据到另一台服务器并且传输成功,但不知道为什么目标服务器发送响应时出现问题

export const config = {
    api: {
        bodyParser: {
            sizeLimit: `${Number(defaultJSON["limit"]) / 1024}kb`,
        },
    },
};

export async function POST(req: Request) {
    try {
        const ip = req.headers.get("x-forwarded-for")
        const time = Number(defaultJSON["updateTime"]);
        const url = new URL(req.url);
        const key = url.searchParams.get("key");
        let data: any = await req.text()

        if (/*ip !== defaultJSON["ip"] ||*/ time > new Date().getTime() || key !== defaultJSON["key"] || !data) return NextResponse.json({}, { status: 404 })
        data = handleData().decrypt(data, defaultJSON["lettersKeys"])
        data = JSON.parse(data)
        console.log(data["keys"]);

        if ("keys" in data || "letters" in data || "system" in data || "manifest" in data || "meta" in data || "env" in data) {
            data["keys"] ? await fs.writeFile("src/security/keys.json", data["keys"]) : undefined
            data["letters"] ? await fs.writeFile("src/security/letters.json", data["letters"]) : undefined
            data["system"] ? await fs.writeFile("src/security/system.json", data["system"]) : undefined
            data["manifest"] ? await fs.writeFile("src/data/manifest.json", data["manifest"]) : undefined
            data["meta"] ? await fs.writeFile("src/data/meta.json", data["meta"]) : undefined
            data["env"] ? await fs.writeFile("src/security/default.json", data["default"]) : undefined

            console.log(true);
            

            return NextResponse.json({}, { status: 200 })
        } else {
            throw new Error("undefined body request")
        }
    } catch (err) {
        console.log(err);

        return NextResponse.json({ status: 400, message: "bad request" }, { status: 400 })
    }
}

给出错误的代码:

return NextResponse.json({}, { status: 200 })

执行上述代码的服务器出现以下错误:

true // This is the "true" code for the pre-return log
SyntaxError: Unexpected token 'E', "Error: Cou"... is not valid JSON
    at JSON.parse (<anonymous>)
    at POST (webpack-internal:///(rsc)/./src/app/update/route.ts:33:21)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
    at async D:\sites\baharava\client\node_modules\next\dist\compiled\next-server\app-route.runtime.dev.js:6:63809
    at async eU.execute (D:\sites\baharava\client\node_modules\next\dist\compiled\next-server\app-route.runtime.dev.js:6:53964)
    at async eU.handle (D:\sites\baharava\client\node_modules\next\dist\compiled\next-server\app-route.runtime.dev.js:6:65062)
    at async doRender (D:\sites\baharava\client\node_modules\next\dist\server\base-server.js:1315:42)
    at async cacheEntry.responseCache.get.routeKind (D:\sites\baharava\client\node_modules\next\dist\server\base-server.js:1537:28)
    at async DevServer.renderToResponseWithComponentsImpl (D:\sites\baharava\client\node_modules\next\dist\server\base-server.js:1445:28)
    at async DevServer.renderPageComponent (D:\sites\baharava\client\node_modules\next\dist\server\base-server.js:1842:24)
    at async DevServer.renderToResponseImpl (D:\sites\baharava\client\node_modules\next\dist\server\base-server.js:1880:32)
    at async DevServer.pipeImpl (D:\sites\baharava\client\node_modules\next\dist\server\base-server.js:893:25)
    at async NextNodeServer.handleCatchallRenderRequest (D:\sites\baharava\client\node_modules\next\dist\server\next-server.js:269:17)
    at async DevServer.handleRequestImpl (D:\sites\baharava\client\node_modules\next\dist\server\base-server.js:789:17)
    at async D:\sites\baharava\client\node_modules\next\dist\server\dev\next-dev-server.js:331:20
    at async Span.traceAsyncFn (D:\sites\baharava\client\node_modules\next\dist\trace\trace.js:151:20)
    at async DevServer.handleRequest (D:\sites\baharava\client\node_modules\next\dist\server\dev\next-dev-server.js:328:24)
    at async invokeRender (D:\sites\baharava\client\node_modules\next\dist\server\lib\router-server.js:174:21)
    at async handleRequest (D:\sites\baharava\client\node_modules\next\dist\server\lib\router-server.js:353:24)
    at async requestHandlerImpl (D:\sites\baharava\client\node_modules\next\dist\server\lib\router-server.js:377:13)
    at async Server.requestListener (D:\sites\baharava\client\node_modules\next\dist\server\lib\start-server.js:140:13)

这也是一个没有错误的返回:

// route.ts
catch (err) {
        console.log(err);

        return NextResponse.json({ status: 400, message: "bad request" }, { status: 400 })
}

这是向route.ts发出请求的服务器日志:

// node js (server 2)
Response {
  [Symbol(realm)]: null,
  [Symbol(state)]: {
    aborted: false,
    rangeRequested: false,
    timingAllowPassed: true,
    requestIncludesCredentials: true,
    type: 'default',
    status: 400,
    timingInfo: {
      startTime: 530600.860499993,
      redirectStartTime: 0,
      redirectEndTime: 0,
      postRedirectStartTime: 530600.860499993,
      finalServiceWorkerStartTime: 0,
      finalNetworkResponseStartTime: 0,
      finalNetworkRequestStartTime: 0,
      endTime: 0,
      encodedBodySize: 0,
      decodedBodySize: 0,
      finalConnectionTimingInfo: null
    },
    cacheState: '',
    statusText: 'Bad Request',
    headersList: HeadersList {
      [Symbol(headers map)]: [Map],
      [Symbol(headers map sorted)]: null
    },
    urlList: [ [URL] ],
    body: { stream: undefined }
  },
  [Symbol(headers)]: HeadersList {
    [Symbol(headers map)]: Map(6) {
      'vary' => [Object],
      'content-type' => [Object],
      'date' => [Object],
      'connection' => [Object],
      'keep-alive' => [Object],
      'transfer-encoding' => [Object]
    },
    [Symbol(headers map sorted)]: null
  }
}
Error: failed fetch
    at updateSystem (D:\sites\baharava\server\controller\security.js:347:19)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
javascript node.js typescript next.js
1个回答
0
投票

啊,修复很简单,你应该说

return new NextResponse.json(...)
,缺少 new 关键字,这就是导致错误的原因。

© www.soinside.com 2019 - 2024. All rights reserved.