2013-02-19 8 views
5

Jestem nowy w node.js, dałem wymóg opracowania bogatej aplikacji internetowej przy użyciu Node.js.Rich rozwoju aplikacji z node.js

W tej chwili pracuję nad przewodnikami dla początkujących na stronie node.js. Miałem okazję spojrzeć na stronę here i pomylić z setkami frameworków. Nie mam pomysłu, aby wybrać odpowiednie ramy i potrzebuję pomocy w tym, aby podjąć doskonałą decyzję. Pozwól mi wyjaśnić moje wymagania.

  1. Chcesz stworzyć API RESTfull dla wszystkich funkcjonalności. (Wszelkie biblioteki w OAuth?)
  2. Chcesz stworzyć aplikację internetową na bazie API. Aplikacja musi być zaprojektowana w taki sposób, aby główne funkcje były rozwijane po stronie klienta. Znaczy, cała logika biznesowa musi zostać opracowana po stronie klienta. Słyszałem już, że niektóre biblioteki, takie jak Backbone.js, Underscore.js, wykonują już tę pracę, ale nie miały jasnego pomysłu na ten temat.

Proszę zasugerować mi ramy, które będą lepsze dla moich wymagań.

Dzięki,

+0

Nie ma setek frameworków MVC, po stronie serwera co najmniej 3/4 i tyle samo po stronie klienta. – mpm

+0

@mpm: Myślę, że nie doceniasz. [TodoMVC] (http://todomvc.com/) zawiera ponad 25 struktur po stronie klienta i więcej niż kompilację do JS po stronie klienta, a także wiele innych kategorii. –

+0

@Scott Sauyet Ile z tych ram ma rozszerzoną dokumentację, posty na blogu, wsparcie i samouczki w Internecie? w ten sposób możesz powiedzieć, że warto użyć frameworka, czy nie. 80% tych ram nie ma znaczenia z punktu widzenia adopcji. – mpm

Odpowiedz

15

Oto dobry tech stos, który używam do moich zastosowań:

po stronie serwera:

  • Express.js
  • Kierownica
  • Passport.js
  • Mongoose
  • MongoDB
  • Formularze Caolan (ale ja obecnie jestem n proces wdrażania własną obsługi formularz)
  • coffeescript

po stronie klienta:

  • Kierownice
  • Jquery
  • Require.js
  • backbone.js
  • tekstu .js (plugin for require.js)
  • Coffeescript (plugin dla require.js. Moje .coffee są skompilowane po stronie klienta w dev i stronie serwera w prod przy użyciu r.js)

Mogę zrobić małą przykładową aplikację później, jeśli chcesz.

[EDIT]

ok tutaj jest przykładowa aplikacja.

struktura projektu: strona

forms 
    |___ sampleForm.coffee 
models 
    |___ sampleModel.coffee 
public 
    |___ images 
    |___ stylesheets 
    | |___ style.less 
    |___ sampleapp 
    |___ main.js 
    |___ cs.js 
    |___ text.js 
    |___ require.js 
    |___ collections 
    | |___ sampleCollection.coffee 
    |___ models 
    | |___ sampleModel.coffee 
    |___ templates 
    | |___ sampleTemplate.hbs 
    |___ lib 
    | |___ handlesbars.js 
    | |___ backbone.js 
    | 
    | |___ ... 
    |___ views 
     |___ sampleView.coffee 
routes 
    |___ index.coffee 
views 
    |___ index.hbs 
app.js 
application.coffee 
package.json 

Serwer:

app.js

require('coffee-script'); 
module.exports = require('./application.coffee'); 

application.coffee

... standard express.js initialization 
require("./routes")(app) 
... start server 

index.coffee

SampleModel = require "../models/sampleModel" 
module.exports = (app) => 
    app.get "/index", (req,res) => 
    return res.render "index" 

    app.get "/samplemodels", (req,res) => 
    SampleModel.find {}, (err, models) => 
     return res.send 404 if err or !models 
     return res.send models 
    return 

index.hbs

<!DOCTYPE HTML> 
<html> 
<head> 
    <title>Sample app</title> 
    <link type="text/css" href="/stylesheets/style.css" rel="stylesheet" > 
    <script src="/mainapp/require.js" data-main="/mainapp/main"></script> 
</head> 
<body> 
    <div id="main-content"></div> 
</body> 
</html> 

main.js

require.config({...}) // Configure requires.js... 

require(["jquery", "cs!models/samplemodel", "cs!views/sampleview","cs!collections/samplecollection"], function ($, Model, View, Collection) { 
    var collection = new Collection(); 
    collection.fetch(); 
    var view = new View({collection: collection}); 
    $("body").html(view.render().$el); 
}) 

sampleview.coffee

define ["backbone", "jquery", "handlebars","text!templates/sampleTemplate.hbs"], (Backbone, $, Hbs, template) => 
    class MainView extends Backbone.View 
    initialize: => 
     @collection.on "change", @render 
     @template = Hbs.compile template 
    render: => 
     html = @template {models: @collection.models} 
     @$el.html(html) 
     return @ 

sampleTemplate.hbs

{{#models}} 
    <p>{{name}}</p> 
{{/models}} 

Ok więc, że jest niezbędna. Teraz musisz nauczyć się, jak używać Backbone.Collection, Backbone.Model, jak skonfigurować Require.js, jak skonfigurować Passport.js i jak zrobić Mongoose model. Możesz użyć Less middleware, aby skompilować swój styl. Nie zapomnij, że możesz wstępnie skompilować całą aplikację kliencką za pomocą r.js.

Mam nadzieję, że ta strona nie zostanie zapomniana i że pomoże każdemu, kto ją spotka w przyszłości.

+0

Dzięki, proszę, zrób mi małą przykładową aplikację –

+0

Zamieniłbym na tej liście Handlebars z Jade, ale reszta jest bardzo dobra. – gustavohenke

+0

Jade jest bardziej elastyczny, ale moim zdaniem daleko do rzeczywistego html.Plus, myślę, że Jade poprowadził niektórych programistów do pisania do logiki w warstwie widoku. –