使用来自emberJs的params过滤器进行快速路由

时间:2016-07-26 12:49:44

标签: node.js express ember.js

我在为此网址制作路线时遇到问题:

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

3 个答案:

答案 0 :(得分:2)

您尝试做的是名为快速查询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

答案 1 :(得分:0)

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

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);
});

答案 2 :(得分:-1)

尝试以下代码

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!');
});