使用Node.js为Ember创建API

使用Node.js为Ember创建API,node.js,ember.js,ember-data,Node.js,Ember.js,Ember Data,我用Express.js为Ember.js制作了一个API,当我使用curl时一切正常,但在Ember应用程序上我遇到了一些奇怪的错误: 以下是我的Node.js应用程序代码: var express = require('express'), http = require('http'); var app = express(); var mysql = require('mysql'); var connection = mysql.createConnection({ host

我用Express.js为Ember.js制作了一个API,当我使用curl时一切正常,但在Ember应用程序上我遇到了一些奇怪的错误:

以下是我的Node.js应用程序代码:

var express = require('express'), http = require('http');
var app = express();
var mysql = require('mysql');

var connection = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: '',
    database: 'blog-api'
});


connection.connect();

app.get('/', function(req, res) {
    res.end('/');
});

app.get('/posts', function(req, res) {
    connection.query('SELECT * FROM posts', function(err, rows, fields) {
        res.send(JSON.stringify({
            posts: rows
        }), 200);
    });
});




http.createServer(app).listen(8080, function(){
  console.log("Express server listening on port 8080");
});
你认为错误来自哪里? 谢谢您的帮助。

一些评论:

1) 您可能在以下方面有拼写错误:

App.Post = DS.Model.extend({
    titre: DS.attr('string'),
如果查询返回此属性,则应为
title

2) 你有:

nodejs不允许您执行跨源查询,并且您的节点代码不提供客户端文件(Ember/js/etc…),因此:

允许跨域策略,您可以通过以下方式执行此操作:

app.use(function (req, res, next) {
        res.header("Access-Control-Allow-Origin", req.header('origin'));
        res.header("Access-Control-Allow-Headers", "X-Requested-With");

        next()
})
或者通过
res.render
而不是
res.end('/')
提供html文件

3) 如果外部提供客户端文件,最好将URL更改为完整路径,如:

http://localhost:8080

4) 我不确定SQL查询返回的结构,但请确保结果完全符合Ember data的预期,在您的特定示例中,结果应为:

{“posts”:[{“title”:“Post1”},{“title”:“Post2”}]}


希望有帮助,格鲁克。

是的,你说得对,这是Ember.js代码:

EmberDemo.Router.map(function () {
  this.resource('posts', function(){
    this.resource('post', {path: '/:post_id'});
  });
  this.route('about');
});


EmberDemo.Store = DS.Store.extend({
  revision: 12,
  adapter: DS.RESTAdapter.extend({
    url: 'localhost:8080'
  })
});

EmberDemo.PostsRoute = Ember.Route.extend({
    model: function() { 
        return EmberDemo.Post.find();
    }
});

EmberDemo.Post = DS.Model.extend({
    titre: DS.attr('string'),
    description: DS.attr('string'),
    contenu: DS.attr('contenu')
});

首先,为什么不试着调试错误呢?例如:
function(err,rows,fields){if(err){console.error(err);}}
我尝试了您的解决方案,但没有打印任何内容,因此错误不在节点端,我将发布我的余烬代码非常感谢!错误只是我的REST适配器的url,我将
localhost:8080
替换为
http://localhost:8080
而且它工作正常。
EmberDemo.Router.map(function () {
  this.resource('posts', function(){
    this.resource('post', {path: '/:post_id'});
  });
  this.route('about');
});


EmberDemo.Store = DS.Store.extend({
  revision: 12,
  adapter: DS.RESTAdapter.extend({
    url: 'localhost:8080'
  })
});

EmberDemo.PostsRoute = Ember.Route.extend({
    model: function() { 
        return EmberDemo.Post.find();
    }
});

EmberDemo.Post = DS.Model.extend({
    titre: DS.attr('string'),
    description: DS.attr('string'),
    contenu: DS.attr('contenu')
});