首页 > 解决方案 > 将 Sequelize 运算符与来自 JSON 正文的值一起使用

问题描述

通常是 Sequelize 和 SQL 查询的新手,但想知道有一种简单的方法可以在查询数据库时使用从客户端发送的 JSON 正文中的值。我尝试了以下几种变体,但均未成功。

服务器路由的一个简单示例如下所示:

builder.post('/', async (req, res) => {
  let track_criteria1 = req.body.criteria1;
  let track_criteria2 = req.body.criteria2;
  const customPlaylist = await req.context.models.Song.findAll({
    where: {
      [Op.and]: [
        { criteria1: { [Op.gt]: track_criteria1 } }, 
        { criteria2: { [Op.gt]: track_criteria2 } }
    ]}
  });

  return res.send(customPlaylist);
});

module.exports = builder;

对于上下文,来自客户端的请求如下所示:

  const handleSubmit = async event => {
    event.preventDefault()
    updateStatus(PENDING) 
    const response = await fetch(`http://localhost:8000/playlistbuilder/`, {
      method: 'POST',
      contentType: 'application/json',
      body: JSON.stringify({
        criteria1: state.trackCriteria.criteriaOne,
        criteria2: state.trackCriteria.criteriaTwo,
      })
    }) 
      const tracks = await response.json()
      setcustomTracks(tracks)
    setTimeout(()  =>  {
      updateStatus(SUCCESS)
    },  2000)
  } 

也许这是一厢情愿!现在没有错误,但是 SQL 查询会像这样注销: WHERE ("songs"."criteria1" > NULL AND "songs"."criteria2" > NULL);

谢谢!

标签: node.jsreactjsexpresssequelize.js

解决方案


如果其他人在这里结束。我通过将 contentType 移动到标题中来解决它。更新的提交处理程序如下所示:

  const handleSubmit = async event => {
    event.preventDefault()
    updateStatus(PENDING) 
    const response = await fetch(`http://localhost:8000/playlistbuilder/`, {
      headers: {
        'Content-Type':'application/json'
      },
      method: 'POST',
      body: JSON.stringify({
        criteria1: state.trackCriteria.criteriaOne,
        criteria2: state.trackCriteria.criteriaTwo,
      }),
    }) 

我对此知之甚少,无法解释为什么会这样。我明天会研究它,但它现在正在工作。


推荐阅读