我正在使用 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-Type
为application/json
. 在应用程序中,我正在使用fetch
使用相同标头的函数。