2015-08-06 2 views
0

Я сделал простое приложение Backbone, и я пытаюсь использовать данные JSON из базы данных MYSQL с помощью сервера Express. Когда я отправляю запрос GET с помощью Express для отправки данных на Backbone, html-шаблон из магистрали исчезает, на экране есть только массив JSON. Как я могу получить данные в моем шаблоне html/underscore?Отправка данных JSON от Express to Backbone

server.js (Express)

var express = require('express'); 
 
var bodyParser = require('body-parser'); 
 
var mysql = require('mysql'); 
 
var app = express(); 
 

 
app.use(express.static(__dirname + '/public')); 
 

 
app.use(bodyParser.json()); 
 
app.use(bodyParser.urlencoded({ 
 
    extended: true 
 
})); 
 

 
var connection = mysql.createConnection({ 
 
    host: 'localhost', 
 
    user: '***', 
 
    password: '***', 
 
    database: '***' 
 
}); 
 

 
connection.connect(); 
 

 
app.get('/users', function(req, res) { 
 
    connection.query('SELECT * FROM users', function(err, result) { 
 
     if (err) { 
 
      console.error(err); 
 
      return; 
 
     } 
 
     res.json(result); 
 
    }); 
 
}); 
 

 
app.get('/users/:id', function(req, res) { 
 
    connection.query('SELECT * FROM users WHERE id =' + connection.escape(req.params.id), function(err, result) { 
 
     if (err) { 
 
      console.error(err); 
 
      return; 
 
     } 
 
     res.json(result); 
 
    }); 
 
}); 
 

 
app.get('*', function(req, res) { 
 
    res.sendFile(__dirname + '/public/index.html'); 
 
}); 
 

 
app.listen(8080);

app.js (Магистраль)

var User = Backbone.Model.extend({ 
 
    default: { 
 
     id: 0, 
 
     name: 'UserName', 
 
     age: 0 
 
    } 
 
}) 
 

 
var Users = Backbone.Collection.extend({ 
 
    model: User, 
 
    url: '/users' 
 
}) 
 

 
var UserView = Backbone.View.extend({ 
 
    template: _.template($('#UserViewTemplate').html()), 
 
    tagName: 'li', 
 
    render: function() { 
 
     this.el.innerHTML = this.template(this.model.toJSON()) 
 
     return this; 
 
    } 
 
}); 
 

 
var UsersView = Backbone.View.extend({ 
 
    template: _.template($('#UsersViewTemplate').html()), 
 
    tagName: 'ul', 
 
    render: function() { 
 
     this.el.innerHTML = this.template(this.collection); 
 
     this.collection.each(function(user) { 
 
       var userView = new UserView({ 
 
        model: user 
 
       }); 
 
       this.$el.append(userView.render().el); 
 
      }, this) 
 
     return this; 
 
    } 
 
}); 
 

 
var UserRouter = Backbone.Router.extend({ 
 
    routes: { 
 
     'users': 'list' 
 
    }, 
 
    list: function() { 
 
     console.log('list function called') 
 
     var usersView = new UsersView({ 
 
      collection: users 
 
     }) 
 
     $('body').append(usersView.render().el); 
 
    } 
 
}) 
 

 
var users = new Users(); 
 

 
users.fetch().then(function() { 
 
    var router = new UserRouter(); 
 
    Backbone.history.start({pushState: true}); 
 
});

ответ

0

Исправлено! Мне просто нужно было использовать маршрут localhost: 3000/# пользователей, а не localhost: 3000/users.

Смежные вопросы