Node.jsでサービスを作成するためのMRテンプレート

画像

要するに、node.jsは、プロジェクトを作成するためのターンキーソリューションを提供しません。 node.jsでの最初のプロジェクトは、IDEから実行する1つのcoffeescriptファイルとrun.jsで構成されていました。 5つのルートがあるとき、すべてが素晴らしかったが、プロジェクトがモデルとルートで大きくなりすぎたとき、それは地獄に変わった。 彼らはこの問題をさまざまな方法で解決します。誰かがハブを使用し、誰かがグローバルに、誰かがすべてを1つのファイルに入れます。



注意:解決策が唯一の正しいふりをしておらず、一般的に正しい。 共有することにしました。 トピックnode.js vs erlangのドラフトは繁殖させないでください、それらは異なるカテゴリーにあります。



せっかちな人のために、 githubにプロジェクトがあります。



MR-モデルルート、ビューres.jsonはビューではなく、サービスにはこれ以上必要ないため、省略します。



プロジェクト構造:

 ├── app.coffee ├── config.coffee ├── models │  └── example.coffee ├── package.json ├── public │  ├── images │  ├── javascripts │  └── stylesheets ├── routes │  ├── index.coffee │  └── root.coffee ├── run-cluster.js └── run.js
      
      











app.coffee


これは、アプリケーションへのエントリポイントです。

 exports.start = () -> log = require('logule') #   log.debug "Spawning new worker" require 'coffee-script' #   ,    .coffee   require ### Basic dependencies ### express = require 'express' app = module.exports = express.createServer() app.__ = require 'underscore' #    app.mongoose = require 'mongoose' # ODM  MongoDb, and yes, it's web scale app.log = log #  config = require('./config.coffee')(app,express) #   models = {} #     models.example= require('./models/example')(app.mongoose).model #   require('./routes/index.coffee')(app, models) # ,      port = process.env.PORT || 5000 #  Heroku     app.listen port log.info "Express server listening on port #{port}"
      
      









config.coffee


 module.exports = (app, express) -> config = this app.configure -> app.use express.bodyParser() app.use express.methodOverride() app.use app.router app.use express.static(__dirname + '/public') app.configure 'development', () -> app.use express.errorHandler({dumpExveption: true, showStack: true}) # ""   app.mongoose.connect process.env.MONGOLAB_URI || "mongodb://localhost/skel" #  heroku app.configure 'production', () -> app.use express.errorHandler() app.mongoose.connect "mongodb://localhost/production" return config
      
      









モデル/ example.coffee


 module.exports = (mongoose) -> Schema = mongoose.Schema ObjectId = Schema.ObjectId #Comment = mogoose.model('Comment') #  ,        mongoose. PostSchema = new Schema { author : { type:ObjectId, index:true } date : Date, content : String #, comments : [Comment] #      } this.model = mongoose.model('Post', PostSchema) #  return this
      
      









package.json


エンジンセクションはHeroku用で、他のすべては明らかです。

 { "name": "mr-skel" , "version": "0.0.1" , "private": true , "engines": { "node": "0.6.x", "npm": "1.xx" } , "dependencies": { "express": "2.5.x" , "mongoose": "2.6.x" , "mongoose-types": "*" , "underscore": "*" , "coffee-script": "*" , "logule": "0.xx" }, "devDependencies": { "forever": "*" , "mocha": "*" , "should": "*" } }
      
      















ルート/ index.coffee


このファイルには、アプリケーション内にあるすべてのルートが保存されます。

 routes = {} routes.root = require('./root.coffee') module.exports = (app, models) -> app.get '/', routes.root.getIndex(models) #    ,       models      root.cofee
      
      









routes / root.coffee


 exports.getIndex = (models) -> (req, res) -> Post = models.example Post.find {}, (err, posts) -> if err? return res.send 500 res.json { status: 'Ba dum tssh', meta: posts }
      
      









run-cluster.js


Cluster APIを使用してアプリケーションを起動します。 Herokuでは機能しませんが、vpsではこの方法でアプリケーションを起動します。

 cluster = require('cluster'); log = require('logule'); require('coffee-script'); if (cluster.isMaster) { log.info("Master have just started"); # i = -  for (i = 1; i <= 2; i++) { cluster.fork(); } cluster.on('death', function(worker) { log.error("Worker " + worker.pid + " died!"); return cluster.fork(); }); } else { app = require('./app.coffee'); app.start() }
      
      









run.js


 require('coffee-script'); app = require('./app.coffee'); app.start();
      
      










All Articles