【问题标题】:Express routing with params filter coming from emberJs使用来自 emberJs 的参数过滤器进行快速路由
【发布时间】:2016-07-26 12:49:44
【问题描述】:

我在为这个 url 创建路由时遇到问题:

http://localhost:3000/api/tests?filter%5Bcodeid%5D=eeee

目前我尝试了这个:

在服务器中

app.route('/api/tests?filter[codeid]=:param')
  .get((req, res) => {
    console.log('It works');
    res.status(200).send({
      msg: 'It works'
    });
  });

在前面

this.store.query('test', { filter: { codeid: code } })
    .then(test => {
      if(test.get('firstObject')){
        console.log(test.get('firstObject').get('id'));
        console.log('exist');
      }
    })
    .catch(err => {
      console.log(err);
    });

但是当我用邮递员测试我的服务器时,我得到了这个结果:

Cannot GET /api/tests?filter%5Bcodeid%5D=eeee

有人知道如何管理这个吗?

编辑:

我使用 json-api

https://github.com/ethanresnick/json-api

这是我所有路由的服务器文件:

https://github.com/DidelotK/QcmServerEmber/blob/Express_problem_stack/app/controller/express-server.js

【问题讨论】:

  • 绑定路径为/api/tests?filter%5Bcodeid%5D=eeee为请求参数。可以绑定/api/test/filter-:codeid
  • 同样的事情它不起作用

标签: node.js express ember.js


【解决方案1】:

你正在尝试做的就是所谓的快速查询,Express doc,所以你的路由不应该有那个额外的参数,它应该看起来像这样

app.get('/test', (req, res, next) => {
    console.log(req.query);
    res.status(200).json(req.query);    
});

当你发送该路线的请求时,比..

http://localhost:3000/test?a=5&b=3

【讨论】:

    【解决方案2】:

    我终于找到了我的问题的解决方案,在这里:

    https://github.com/ethanresnick/json-api/issues/64

    所以错误出现在 ember 中,为了使其正常工作,我更改了这个:

    this.store.query('test', { filter: { codeid: code } })
    .then(test => {
      if(test.get('firstObject')){
        console.log(test.get('firstObject').get('id'));
        console.log('exist');
      }
    })
    .catch(err => {
      console.log(err);
    });
    

    到这里:

    this.store.query('test', { filter: { simple { codeid: code } } })
    .then(test => {
      if(test.get('firstObject')){
        console.log(test.get('firstObject').get('id'));
        console.log('exist');
      }
    })
    .catch(err => {
      console.log(err);
    });
    

    【讨论】:

      【解决方案3】:

      试试下面的代码

      var express = require('express');
      var app = express();
      app.use(require('body-parser').urlencoded({extended: false})); // to provide req.params.param
      
      app.route('/test')
        .get((req, res) => {
          console.log('It works');
          res.status(200).json({ // I think you doesn't want send text
            msg: 'It works'
          });
        });
      
      app.route('/test/filter[codeid]=:param')
        .get((req, res) => {
          console.log('It works', req.params.param);
          res.status(200).send({
            msg: 'It works',
            code: req.params.param
          });
        });
      
      app.listen(3000, function () {
        console.log('Example app listening on port 3000!');
      }); 
      

      【讨论】:

      • 过滤器不起作用,我只有它起作用
      猜你喜欢
      • 2017-05-27
      • 2016-04-14
      • 1970-01-01
      • 1970-01-01
      • 2018-09-27
      • 2017-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多