Ember.js 余烬cli模拟不';不返回单个记录
我正在构建一个简单的ember cli应用程序。我试图实现新的mocks特性 server/mocks/users.jsEmber.js 余烬cli模拟不';不返回单个记录,ember.js,ember-data,ember-cli,Ember.js,Ember Data,Ember Cli,我正在构建一个简单的ember cli应用程序。我试图实现新的mocks特性 server/mocks/users.js module.exports = function (app) { var express = require('express'); var usersRouter = express.Router(); usersRouter.get('/', function (req, res) { res.send({"users": [ {
module.exports = function (app) {
var express = require('express');
var usersRouter = express.Router();
usersRouter.get('/', function (req, res) {
res.send({"users": [
{
"id": 1,
"login": 'berdof'
},
{
"id": 2,
"login": 'berdof2'
}
]});
});
app.use('/api/users', usersRouter);
};
接下来,当我尝试获取数据时,例如在浏览器中,我只打开
http://0.0.0.0:4200/api/user/
并获得正确的数据。但是,当我想要获取一条记录时,它只会抛出一个错误
Cannot GET /api/users/1
你知道为什么吗?我和这个虫子斗争了大约2个小时。
谢谢你的帮助!祝你有愉快的一天
更新
以下是根据@kaungst post修改的答案:
module.exports = function (app) {
var express = require('express');
var router = express.Router();
var dataToSend = [
{
id: 1,
login: 'berdof',
},
{
id: 1,
login: 'berdof2'
}
];
router.get('/', function (req, res) {
res.send({"users": dataToSend});
});
router.get('/:id', function (req, res) {
var id = req.params.id;
res.send({"user": dataToSend[id]});
});
app.use('/api/users', router);
};
您必须创建一个附加的模拟来处理该情况 对于此特定示例,请运行
ember g http-mock user
应该在/server/mocks/user.js中生成以下内容
module.exports = function (app) {
var express = require('express');
var userRouter = express.Router();
userRouter.get('/', function (req, res) {
res.send({"user": []});
});
app.use('/api/user', userRouter);
};
把它改成这样
module.exports = function (app) {
var express = require('express');
var userRouter = express.Router();
userRouter.get('/', function (req, res) {
// this part is hacky but works
// main thing is to decide what you want to send
// happy to update if someone knows a better solution
var url = req.baseUrl.split('/');
var id = parseInt(url[url.length-1]);
var users = [{
"id": 1,
"login": 'berdof'
},
{
"id": 2,
"login": 'berdof2'
}];
res.send({"user": users[id]});
});
app.use('/api/user/:id', userRouter);
};
http模拟的更好替代方案
module.exports = function (app) {
var express = require('express');
var usersRouter = express.Router();
usersRouter.get('/', function (req, res) {
res.send({"users": [
{
"id": 1,
"login": 'berdof'
},
{
"id": 2,
"login": 'berdof2'
}
]});
});
app.use('/api/users', usersRouter);
};
我建议在客户端开发和测试中使用。
项目网站提供了足够详细的文档
好处
module.exports = function (app) {
var express = require('express');
var usersRouter = express.Router();
usersRouter.get('/', function (req, res) {
res.send({"users": [
{
"id": 1,
"login": 'berdof'
},
{
"id": 2,
"login": 'berdof2'
}
]});
});
app.use('/api/users', usersRouter);
};
- 它创建一个支持所有CRUD操作的内存db
- 在开发和测试中使用相同的数据
- 与很好地集成以创建随机数据
- 能够创建装置
在努力使用http模拟之后,我强烈推荐它。谢谢!很好的解决方案!我也在考虑类似的事情,但我认为在ember cli中也可以这样做。我调整了你的代码,现在它可以返回单记录和复数。如果你有改进我的代码的想法,我想听听!您如何处理这个问题,例如,您希望获取模型中的第一个json对象,并直观地将
1
设置为路由中的必需参数,但是在http mock send命令res.send({“user”:users[id]})中
您将不会自动获取第一个对象,而是第二个对象,因为users
被创建为一个数组,users[1]
将返回id为2的对象(至少通过上面@AlexBerdyshev的实现)。我现在用varid=req.params.id-1解决了这个问题代码>在我的用例中,但它有点粗糙。有没有一个更“余烬”的方式来做到这一点?