使用Node.js为Ember创建API
我用Express.js为Ember.js制作了一个API,当我使用curl时一切正常,但在Ember应用程序上我遇到了一些奇怪的错误: 以下是我的Node.js应用程序代码:使用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
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')
});