我的余烬APP在显示后添加了意外的记录

时间:2015-12-17 18:20:58

标签: javascript api express ember.js ember-cli

当我点击帖子标题('测试帖子')here时,当我返回帖子列表时,我有意外的空记录。这是一种奇怪的行为。我的结构很简单:

Ember模特(post.js):

import DS from 'ember-data';

export default DS.Model.extend({
  title: DS.attr('string'),
  slug: DS.attr('string'),
  intro: DS.attr('string'),
  body: DS.attr('string'),
  created_at: DS.attr('date'),
  updatedAt: DS.attr('date')
});

Ember路线:

this.route('posts', {path: 'blog'}, function() {
    this.route('post', {path: '/:post_slug'});
  });

index.js - 列表

import Ember from 'ember';

export default Ember.Route.extend({
  model() {
    var posts = this.store.findAll('post');
    return posts;
  }
});

post.js - 单一帖子

import Ember from 'ember';

export default Ember.Route.extend({
  model(params) {
        return this.store.findRecord('post', params.post_slug);
    }
});

Ember序列化器:

import DS from 'ember-data';

export default DS.RESTSerializer.extend({
  primaryKey: '_id',
  serializeId: function(id) {
        return id.toString();
  },
  extractCreateRecord: function() {
    // do nothing
  }
});

我使用RESTAdapter。

Express API:

app.get('/api/posts', function(req, res, next) {
    Posts.find(function(err, response) {
        posts = response;
        res.json({posts: posts});
    });
});

app.get('/api/posts/:url', function(req, res) {
    Posts.findOne({slug:req.params.url},function(err, response){
        post = response;
    res.json({post: post});
    });
});

任何人都可以帮助我?

1 个答案:

答案 0 :(得分:0)

在序列化程序中,primaryKey应为product_slug而不是_id。需要告诉Ember它应该将slug视为唯一标识符。您在下面的博客文章中提到了您的确切问题...

http://fullstackstanley.com/read/handling-slug-urls-in-ember-and-phoenix

如果您查看Ember检查员(也在博客文章中提到),您会看到一条ID为5672f9551615cf0b07e1c3cf的记录,另一条记录为test-post

希望有所帮助!