2013-07-30 4 views
3

Я сделал API с Express.js для ember.js, когда я свернуться все в порядке, но на Тлеющей App я получил некоторые странные ошибки: enter image description hereИспользуйте Node.js для создания API для 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"); 
}); 

С какой, по вашему мнению, ошибка? Спасибо за помощь.

+0

В начале, почему бы вам не попробовать отладки ошибку? EG: 'function (err, rows, fields) {if (err) {console.error (err); }} ' – badsyntax

+0

Я пробовал ваше решение, но ничего не печаталось, поэтому ошибка не на стороне узла, я выложу свой код ember – DCK

ответ

2

Несколько комментариев:

1) Вы могли бы иметь орфографическую ошибку:

App.Post = DS.Model.extend({ 
    titre: DS.attr('string'), 

должно быть title, если ваш запрос возвращает это свойство.

2) У вас есть:

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

nodejs не позволит выполнить перекрестный запрос происхождения, и ваш код узла не обслуживает клиентские файлы (Ember/JS/и т.д ...), так:

политика междоменного разрешение Либо, вы можете сделать это:

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() 
}) 

Или обслуживать HTML файлы через res.render вместо res.end('/').

3) Если клиент файлы служили внешне лучше изменить URL на полный путь, например:

http://localhost:8080

4) Я не уверен, о структуре возвращаемых запросом SQL, но гарантировать результат точно так, как Эмбер-данные ожидают, в вашем конкретном примере, это должно привести к:

{"posts":[{"title":"Post1"},{"title":"Post2"}]}

Надеется, что это помогает, Глюку.

+0

Большое вам спасибо! Ошибка была только URL моего адаптера REST, я заменяю 'localhost: 8080' на' http: // localhost: 8080' и работает правильно. – DCK

0

Да, вы правы, вот код 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') 
}); 
Смежные вопросы