Если цель клиента отправить почтовый запрос с телом запроса имеет значение null, то, как с этим справиться, описано в node.js. Пожалуйста, ознакомьтесь с файлом /api/health-check. Запрос является публикацией, но тело запроса имеет значение null. Я получил ошибку
SyntaxError: Unexpected token 'n', "null" is not valid JSON
at JSON.parse (<anonymous>)
at createStrictSyntaxError (/Users/aungmyooo/Development/INTERVIEW-TEST/teamups-tech-x/server/node_modules/body-parser/lib/types/json.js:169:10)
at parse (/Users/aungmyooo/Development/INTERVIEW-TEST/teamups-tech-x/server/node_modules/body-parser/lib/types/json.js:86:15)
at /Users/aungmyooo/Development/INTERVIEW-TEST/teamups-tech-x/server/node_modules/body-parser/lib/read.js:128:18
at AsyncResource.runInAsyncScope (node:async_hooks:206:9)
at invokeCallback (/Users/aungmyooo/Development/INTERVIEW-TEST/teamups-tech-x/server/node_modules/raw-body/index.js:238:16)
at done (/Users/aungmyooo/Development/INTERVIEW-TEST/teamups-tech-x/server/node_modules/raw-body/index.js:227:7)
at IncomingMessage.onEnd (/Users/aungmyooo/Development/INTERVIEW-TEST/teamups-tech-x/server/node_modules/raw-body/index.js:287:7)
at IncomingMessage.emit (node:events:518:28)
at IncomingMessage.emit (node:domain:488:12)
экспресс-приложение
import express, { Request, Response, NextFunction } from "express";
import cors from "cors"; // Import the cors middleware
import bodyParser from "body-parser";
import coustomerLoyaltyRouter from "./routes/customer-loyalty-route";
require("dotenv").config();
const app = express();
// Enable CORS for only localhost:3000
app.use(cors({
origin: "http://localhost:3000"
}));
app.use(bodyParser.json());
app.use("/api", coustomerLoyaltyRouter);
// Define a route for the health check endpoint
app.post("/api/health-check", (req: Request, res: Response) => {
if (!req.body) {
// Check if request body is null or empty
res.status(400).json({ error: "Request payload is null or empty" });
return;
}
res.json({ message: "pong" });
});
app.use((err: Error, req: Request, res: Response, next: NextFunction) => {
console.error(err.stack);
res.status(500).json({ error: err });
});
export default app;
ошибка, которую вы показываете, возникает из-за отправки не null
, а строки "null"
в формате JSON, что недопустимо, следовательно, ошибка... правильная отправка null
должна запускать блок промежуточного программного обеспечения маршрута !req.body
вместо ошибки синтаксического анализатора тела
@traynor Да, paylaod клиентского запроса намеренно передает значение null . Если полезная нагрузка равна {}, я могу проверить.
в этом случае я бы посчитал это неверным запросом, который должен обрабатываться на уровне сервера, как предложено в связанном посте, или более подробно здесь Обработка ошибок
Проблема заключается в том, что при анализаторе тела вы передаете параметры { strict: false }, чтобы разрешить анализ нулевых и других примитивных значений.
app.use(bodyParser.json({ strict: false }));
Отвечает ли это на ваш вопрос? Лови ошибку экспресс bodyParser