我正在构建一个简单的ember-cli应用程序。我试图实现新的模拟功能。
服务器/嘲笑/ users.js
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
你知道为什么吗?我一直在和这个bug斗争大约2个小时。 谢谢你的帮助!祝你有个美好的一天!
更新
以下是根据@kaungst帖子修改后的答案:
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);
};
答案 0 :(得分:3)
你必须创建一个额外的模拟来处理这种情况
对于此特定示例运行
ember g http-mock user
应在< \ app-name> /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);
};
答案 1 :(得分:0)
更好的替代http-mocks
我建议使用ember-cli-mirage进行客户端开发和测试。 项目网站提供了足够详细的文档
<强>优势强>
在努力使用http-mocks时,我强烈推荐它。