I'm using Node and Express, hosting in Firebase Functions to build an API to persist the data.
When I send a JSON object to a router, the parser works ok, but when I have Dates, they are parsed as string, causing some trouble to save the data correctly.
I discovered the body parser could help me, as it includes a reviver function to JSON.parse
when parsing the request body.
In my index.ts
I have:
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);
In the visit.ts
router I have:
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;
It seems the reviver is never called (if I put just a console.log
, it's never showed up)
Am I missing some detail? The order of middlewares in index.ts
is wrong? I've got no clue :(
PS: I'm testing using Postman, putting the header Content-Type
as application/json
. In the application I am using the fetch
function using the same header.