1

我正在使用 Node 和 Express,托管在 Firebase Functions 中来构建 API 来保存数据。

当我将 JSON 对象发送到路由器时,解析器可以正常工作,但是当我有 Dates 时,它们会被解析为 string,从而导致无法正确保存数据。

我发现正文解析器可以帮助我,因为它JSON.parse在解析请求正文时包含了一个 reviver 函数。

在我的index.ts我有:

const app = express();
const main = express();

app.use('/', indexRouter);
app.use('/mail', mailRouter);
// ... more routes

main.use(cors());
main.use(bodyParser.urlencoded({ extended: true }));
main.use(bodyParser.json({
    reviver: (key, value) => {
        if (typeof value === "string") {
            const valueDate = new Date(value).getTime();

            if(!isNaN(valueDate)){
                return new Date(value);
            }
        }

        return value;
    }
}));
main.use('/v1', app);

export const api = functions.https.onRequest(main);

visit.ts路由器中,我有:

import express from 'express';
import Visit from '../models/visit';

const router = express.Router();

router.post('/', async (req, res) => {
    const visit = <Visit>req.body;
    console.log('Is date: `, visit.date instanceof Date)
});

export default router;

似乎从未调用过 reviver (如果我只放了 a console.log,它就永远不会出现)

我错过了一些细节吗?中间件的顺序index.ts错了?我没有头绪:(

PS:我正在使用 Postman 进行测试,将标题设置Content-Typeapplication/json. 在应用程序中,我正在使用fetch使用相同标头的函数。

4

0 回答 0