【问题标题】:Key name is not being accepted in postman邮递员不接受密钥名称
【发布时间】:2021-01-04 15:25:12
【问题描述】:

即使在邮递员中提供了名称的键值后,我仍会收到所需名称的错误。我想我在架构中犯了一个错误

app.post('/api/genres', (req, res)=>{
    const { error }= validateGenre(req.body)
    if (error) return res.status(400).send(error)

    const genre = {
        id: genres.length +1,
        name: req.body.name
    }
    genres.push(genre)
    res.send(genre)
})

app.put('/api/genres/:id', (req,res) => {
    const genre = genres.find(c => c.id===parseInt(req.params.id))
    if(!genre) return res.status(404).send('Invalid ID')

    const { error }= validateGenre(req.body)
    if (error) return res.status(400).send(error.details[0].message)
    
    genre.name= req.body.name
    res.send(genre)
})

    // **I think I did something wrong here**
function validateGenre(genre) {
    const schema = Joi.object({
        name: Joi.string().min(3).required()
    })
  
   return schema.validate(genre);
}

【问题讨论】:

  • 您可以在不运行整个服务器的情况下测试validateGenre 功能。试试这个 console.log(validateGenre({ name 'Hello world' })); 也试试 console.log(typeof(req.body), req.body) 以确保 body 是一个对象,并看到它有 name 属性。

标签: node.js express postman


【解决方案1】:

确保您正在解析正文。假设您在邮递员和前端都使用 JSON,您应该具有以下内容:

const jsonParser = require('body-parser').json({ extended: true });

// in order to use it on all routes.
app.use(jsonParser);

// or the more recommended way, add jsonParser only to the specific
// endpoints you want to parse JSON
app.post('/api/genres', jsonParser, (req, res)=>{
    const { error }= validateGenre(req.body)
    if (error) return res.status(400).send(error)

    const genre = {
        id: genres.length +1,
        name: req.body.name
    }
    genres.push(genre)
    res.send(genre)
})

您还应该记录收到的正文并对其进行测试,而不要像 Molda 在他们的评论中建议的那样启动整个服务器。

【讨论】:

    猜你喜欢
    • 2012-07-11
    • 2016-07-05
    • 2021-04-15
    • 1970-01-01
    • 2015-04-28
    • 2020-01-03
    • 1970-01-01
    • 2017-12-16
    • 1970-01-01
    相关资源
    最近更新 更多