Node JS邮政请求主体在JOI验证软件包中



最近,我正在使用节点JS和JOI的Node验证包。我使用邮递员通过邮政部门发送帖子数据,没有参数。但是在节点JS应用程序中,请求主体显示未定义。这是狙击:

const express = require('express');
const Joi = require('joi');
const app = express();
app.listen(3000, () => 'Server is listening on 3000');
app.post('/users', (request, response) => {
    const schema = Joi.object().keys({
        username: Joi.string()
            .alphanum()
            .min(3)
            .max(30)
            .required()
    });
    const result = Joi.validate(request.body, schema);
    response.send(result);
});

我想你忘记了身体parser

你可以使用身体份子软件包

npm I body-parser

,您可以使用它,例如这个

const bp = require('body-parser')
app.use(bp.json())

或您可以从Express到

使用
app.use(express.json())
use this example
const express = require('express');
const bodyParser = require('body-parser');
const Joi = require('joi');
const expressJoi = require('express-joi-validator');
var app = express();
app.use(bodyParser.json());
const schema = {
    query: {
        name: Joi.string().required()
    },
    body: {
        age: Joi.number().required(),
        company: Joi.object({
            name: Joi.string().required(),
            role: Joi.string().required().valid('HR', 'Technical') //enum style validation
        }).required()
    },
    params: {
        id: Joi.number().required()
    }
}
app.post('/testapi/:id', expressJoi(schema), function(req, res){
    res.send('validated');
});
//error handler
app.use(function (err, req, res, next) {
    if (err.isBoom) {
         return res.status(err.output.statusCode).json(err.output.payload);
    }
});
app.listen('3000',  ()=>{
    console.log(`listening to 3000`);
});

最新更新