import express, {Request, Response} from 'express';
interface Status { num: number; msg: string; }
let status:Status = {num: 0, msg: 'init'}; var router = express.Router(); var bodyParser = require('body-parser');
// api: data/status_json // router.post('/status_json', function(req:Request, res:Response, next) { router.post('/status_json', bodyParser.json(), function(req:Request, res:Response, next) { console.log('[server] received, header = ' + JSON.stringify(req.headers)) console.log('[server] body = ' + req.body); console.log('[server] Content-Type = ' + req.get('content-type'));
// Step 2: Check JSON const Ajv = require("ajv/dist/jtd") const ajv = new Ajv() // options can be passed, e.g. {allErrors: true}
const schema = { properties: { num: {type: "int32"}, msg: {type: "string"} }, }
const validate = ajv.compile(schema) // Test validator console.log('should be valid', validate({num: 0, msg: 'world'})) // ok let statusMy2:Status = {num: 0, msg: 'world'}; console.log('should be valid', validate(statusMy2)) console.log('should be valid req.body', validate(req.body))
if(!validate(req.body)){ let strMsg:string = '[server] ERROR. validate(req.body).\nReceived:' + JSON.stringify(req.body); console.log(strMsg); console.log('v error = ' + JSON.stringify(validate.errors)); res.send(strMsg) return; } console.log('[server] JSON schema: ok.');
let statusMy:Status = req.body as Status;
// Step 3: Access data for (var prop in statusMy) { if (statusMy.hasOwnProperty(prop)) { console.log('prop = ' + prop + ', value = ' + statusMy[prop as keyof Status]); } }
// Step 4: Response to client let strMsg:string = '[server] response. statusMy = ' + JSON.stringify(statusMy); console.log(strMsg); res.send(strMsg) });
module.exports = router;
|