我正在使用ember-cli设置一个基本应用程序,并且使用带有ember-data的api-stub遇到了麻烦。我已经引用了api-stub README并引用了ember指南,但无法弄清楚我错过了什么。我有点像菜鸟,所以原谅我的任何明显的疏忽。
这是我的设置......
/api-stub/routes.js
server.get('/listings', function(req, res) {
var listing = {
"listing": [{
"id": 1,
"title": "Sunny 1-bedroom",
"unit_type": "1br / 1ba",
"description": "Roomy 1-bedroom apartment in pre-war walkup. Gets great morning light from the south."
},
{
"id": 2,
"title": "Large 2-bedroom",
"unit_type": "2br / 1.5ba",
"description": "Roomy 2-bedroom apartment in pre-war walkup. Gets great morning light from the south."
}]
};
res.send(listing);
});
/app/adapters/application.js
var ApplicationAdapter = DS.RESTAdapter.extend({
namespace: 'api'
});
export default ApplicationAdapter;
/package.json
{
...
"APIMethod": "stub",
...
}
/app/router.js
this.resource('listings', function() {
this.resource('listing', { path: '/:listing_id' });
});
/app/routes/listings.js
var ListingsRoute = Ember.Route.extend({
model: function() {
return this.store.findAll('listing');
}
});
export default ListingsRoute;
/app/models/listing.js
var attr = DS.attr,
hasMany = DS.hasMany,
belongsTo = DS.belongsTo;
var Listing = DS.Model.extend({
title: attr(),
unit_type: attr(),
description: attr()
});
export default Listing
/app/templates/listing.hbs
<h2>{{title}}</h2>
<p>{{unit_type}}</p>
<p>{{description}}</p>
在控制台中,它显示404 for ... / api / listing并且chrome中的ember检查器没有显示任何记录。
非常感谢任何帮助!
答案 0 :(得分:9)
最近,ember-cli现在支持API存根。我也使用以下示例设置(非常类似于您的原始设置):
/app/adapters/application.js
var ApplicationAdapter = DS.RESTAdapter.extend({namespace: 'api'});
export default ApplicationAdapter;
/app/package.json
{
...
"APIMethod": "stub",
...
}
/app/routes/application.js
export default Ember.Route.extend({
model: function() {
return Ember.RSVP.hash({
foos: this.store.findAll('foo'),
bars: this.store.findAll('bar')
});
},
setupController: function(controller, models) {
controller.set('foos', models.foos);
controller.set('bars', models.bars);
}
});
/app/router.js
var Router = Ember.Router.extend({
location: ENV.locationType
});
Router.map(function() {
this.resource('foos', function() {
this.resource('foo', { path: '/:foo_id' });
});
this.resource('bars', function() {
this.resource('bar', { path: '/:bar_id' });
});
});
export default Router;
/app/server/routes/foos.js
module.exports = function(app) {
app.get('/api/foos', function(req, res) {
res.send({
'foos': [
...
]
});
})
}
/app/server/routes/bars.js
module.exports = function(app) {
app.get('/api/bars', function(req, res) {
res.send({
'bars': [
...
]
});
})
}
答案 1 :(得分:4)
我通过推特向Stefan Penner询问了这个问题,这是他的回答:
@caretpi API存根在cli中不起作用。我们希望尽快融入其中
- Stefan Penner(@stefanpenner)April 1, 2014
GitHub上有一个问题:https://github.com/stefanpenner/ember-cli/issues/153
答案 2 :(得分:4)
从版本0.0.41开始,使用http-mock和http-proxy蓝图。请参阅我的回答here for using http-mock。像这样使用http-proxy:
>ember g http-proxy projects http://localhost:8080/
将this fix(kudos @tstirrant)应用于生成的代理代码后,它将按预期工作。即。它会将localhost:4200 / projects代理到localhost:8080 / projects
更新:在版本0.0.46中,生成器包含“修复”,因此不再需要它。
答案 3 :(得分:1)
要配置存根API,您需要编辑 package.json 。
stub
以使用这些快速服务器存根路由。http://localhost:8000
更新 - 这是我的工作设置
api-stub/routes.js
server.namespace('/api', function() {
server.get('/posts', function(req, res) {
res.send([...]);
});
});
package.json
...
"name": "myapp",
"namespace": "appkit",
"APIMethod": "stub",
"proxyURL": "http://localhost:8000",
"proxyPath": "/api",
...
现在,对ajax
的{{1}} GET
请求以模拟数组进行响应。
希望这适合你。