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

服务器返回JSON解析错误:SyntaxError问题排查求助

问题排查:DELETE接口404导致JSON解析失败

问题现象

  • 测试运行时抛出错误:SyntaxError: Unexpected token < in JSON at position 0 at JSON.parse (<anonymous>)
  • API客户端调用该接口返回:Cannot DELETE /v1/admin/quiz/trash/empty
  • 服务器日志记录:DELETE /v1/admin/quiz/trash/empty?token=4017954885&quizids=%5B216893084358531%2C316893084359311%5D 404 0.283 ms - 167

相关代码

server.ts 路由定义

app.delete('v1/admin/quiz/trash/empty', (req: Request, res: Response) => {
  const token = req.query.token as string;
  console.log(req.query.quizids);
  const quizids = JSON.parse(req.query.quizids as string) as number[];
  const response = adminTrashEmptyV1(token, quizids);
  if ('error' in response) {
    if (response.error === 'Token is not a valid structure.') {
      res.status(401);
    } else if (response.error === 'Provided token is valid structure, but is not for a currently logged in session.') {
      res.status(403);
    } else {
      res.status(400);
    }
  }
  return res.json(response);
});

requests.ts 请求封装代码

import request, { HttpVerb, Options } from 'sync-request';
import { port, url } from '../src/config.json';
const SERVER_URL = `${url}:${port}`;

function createRequest(method: HttpVerb, path: string, data: object) {
  let content: Options;
  if (method === 'PUT' || method === 'POST') {
    content = { json: data };
  } else {
    content = { qs: data };
  }
  const res = request(
    method,
    SERVER_URL + path,
    content
  );

  return { 
    body: JSON.parse(res.body.toString()),
    statusCode: res.statusCode
  };
}

// clear
export function requestClear() {
  return createRequest('DELETE', '/v1/clear', { });
}

export function requestTrashDelete(token: string, quizids: number[]) {
  return createRequest('DELETE', `/v1/admin/quiz/trash/empty`, { token: token, quizids: JSON.stringify (quizids) });
}

问题根源

  1. 路由匹配失败导致404:Express框架中,路由路径必须以斜杠/开头,而server.ts里的路由定义缺少开头的斜杠,导致无法匹配请求的/v1/admin/quiz/trash/empty路径,服务器返回404状态码及对应的HTML错误页面。
  2. JSON解析错误:测试代码的createRequest函数默认将所有响应体当作JSON解析,但404返回的HTML页面以<开头,不符合JSON格式,因此抛出语法错误。

修复方案

修改server.ts中的路由定义,在路径前添加斜杠:

app.delete('/v1/admin/quiz/trash/empty', (req: Request, res: Response) => {
  // 原有业务逻辑保持不变
});

重启服务器后重新运行测试或调用API,此时路由能正确匹配,返回JSON格式响应,JSON解析错误将消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 14:24:53