使用Node.js + Mongodb构建基于Cloud Foundry的项目
随着云计算的兴起,很多厂商都推出了自己的云计算平台,如VMware、Amazon、Google、Microsoft等。
本文将介绍VMware公司的云计算平台 - Cloud Foundry,本文将使用Node.js + MongoDB构建基于Cloud Foundry的项目。
必备知识:
Node.js和NPM命令行的使用。
Node.js的语法。
MongoDB的语法。
Mongoose的语法。
环境搭建:
Windows 7
Node.js + Ruby + vmc(Cloud Foundry CIL命令行工具)
用户级别及难度:
全部用户
适中
通过本文将学会:
掌握Node.js、Ruby、DevKit、vmc(Cloud Foundry CIL命令行工具)的环境配置。
使用tunnel连接Cloud Foundry远程数据库(MongoDB)的方式。
Node.js的配置:
配置:
根据实际情况下载对应的node.js安装包。(选择的版本尽量与Cloud Foundry的Node.js环境保持一致)
由于使用了msi方案,所以直接双击下载后的安装包即可。
重启系统。
验证:
在cmd中键入:node -v / npm -v 如果出现相应的版本号,则安装成功。
Ruby的配置:
Cloud Foundry的操作基于vmc(CIL命令行工具),安装vmc前需要Ruby环境。
由于需要使用Devkit,所以此处的Ruby版本为:1.9.2。(1.9.3在DevKit下有问题)
配置:
解压到任意文件夹,如:{盘符}:\DevTools\ruby-1.9.2-p290。
在Windows环境变量中增加:
RUBY_HOME = {盘符}:\DevTools\ruby-1.9.2-p290
Path += %RUBY_HOME%\bin(需配置在系统环境变量,而非用户环境变量)
重启系统。
验证:
在cmd中键入:ruby -v / gem -v 如果出现版本号,则安装成功。
vmc的安装:
安装:
使用gem安装vmc,在cmd中键入gem install vmc。(无需重启)
验证:
在cmd中键入vmc -v,如果出现版本号,则安装成功。
vmc的使用:
建立连接:
vmc target api.cloudfoundry.com(指定Cloud Foundry API地址)
建立账户:
通过网站建立:在http://www.cloudfoundry.com/建立账户。
通过vmc建立,在cmd中键入:vmc add-user [--email, --passwd]。
登陆:
在cmd中键入:vmc login(根据提示输入注册时的邮箱地址及密码)
建立app(Node.js):
在本地建立文件夹,如:{盘符}:\nodejs\local\testcf
定位到testcf根目录,在cmd中键入:npm install express
在testcf文件夹中新增index.js文件,并键入如下内容:
var express = require('express');
var app = express();
app.get('/', function(req, res) {
res.send('Hello from Cloud Foundry');
});
app.listen( process.env.VMC_APP_PORT || 3000 );
console.log( "Server start up!" );
本机测试:
定位到testcf根目录,在cmd中键入:node index.js
控制台出现:“Server start up!”后,在浏览器中键入:http://loaclhost:3000,如显示“Hello from Cloud Foundry”,说明运行成功。
上传App到Cloud Foundry:
定位到testcf根目录,在cmd中键入:vmc push --runtime=node08,生成如下的内容:
Would you like to deploy from the current directory? [Yn]: y
Application Name: ks-test-cf
Detected a Node.js Application, is this correct? [Yn]: y
Application Deployed URL [ks-test-cf.cloudfoundry.com]:
Memory reservation (128M, 256M, 512M, 1G, 2G) [64M]: 128
How many instances? [1]: 1
Bind existing services to 'ks-test-cf'? [yN]: n
Create services to bind to 'ks-test-cf'? [yN]: n
Would you like to save this configuration? [yN]: y
Manifest written to manifest.yml.
Creating Application: OK
Uploading Application:
Checking for available resources: OK
Processing resources: OK
Packing application: OK
Uploading (22K): OK
Push Status: OK
Staging Application 'ks-test-cf': OK
Starting Application 'ks-test-cf': OK
注:上述英文比较简单,翻译略过。由于当前项目并没有使用数据库,所以
不需要绑定(Binding)和建立(Create)任何Service。
在浏览器中键入:http://ks-test-cf.cloudfoundry.com/,如出现“Hello from Cloud Foundry”,说明运行成功。(与在本地运行效果一样)
MongoDB的配置:
配置:
根据实际情况下载对应的MongoDB压缩包。
注:由于Cloud Foundry对应MongoDB的版本是2.0,所以避免出现本地测试环境与Cloud Foundry不一致的情况,尽量选择相应版本。
解压到任意文件夹,如:{盘符}:\DevTools\mongodb-2.0.7。
在Windows环境变量中增加:
MONGODB_HOME = {盘符}:\DevTools\mongodb-2.0.7
Path += %MONGODB_HOME%\bin
重启系统。
验证:
在cmd中键入:mongo --version 如出现版本号,则安装成功。
使用:
在本地建立一个文件夹,如:{盘符}:\mongodb\testdb。
在cmd中键入:mongod --dbpath {盘符}:\mongodb\testdb,即可连接到本地数据库。
注:可以使用MongoVUE等客户端操作MongoDB。
Mongoose的配置:
Mongoose是第三方的Noe.js模块,可以更方便的操作MongoDB。
下载:
在cmd中键入:npm install mongoose
验证:(如出现类似下图的内容,说明安装成功)
注意:
mongoose在安装的时候需要依赖于mongodb(Node.js模块)
如mongodb模块未安装的话,mongoose会自动安装,如上图所示。
独立安装mongodb,在cmd中键入:npm install mongodb(注意npm的版本必须要大于1.1.19,否则会出现错误)
Node.js 连接MongoDB:(Localhost本地方式)
Mongoose的引入:
var db = require( 'mongoose' );
定义一个Object结构:(为了与Cloud Foundry配合)
mongo = {
'hostname' : 'localhost',
'port' : 27017,
'username' : '',
'password' : '',
'db' : testdb
}
注:hostname、port和db这三个属性。(应与你的开发环境相对应)
生成mongoose连接mongodb时的URL字符串:
var generate_mongo_url = function( mongo ) {
return 'mongodb://' + mongo.hostname + ':' + mongo.port + '/' + mongo.db;
}
连接数据库(MongoDB):
db.connect( mongourl );
建立Schame及模型:
var Schema = db.Schema,
ObjectId = Schema.ObjectId;
var testSchema = new Schema({
host : String,
dbs : String,
time : Date
});
绑定模型:
var TestModule = db.model( 'test-cloudfoundry', testSchema );
注:test-cloudfoundry是Collection的名字(Collection相当于SQL的Table概念)
保存数据到Collection:
var test = new TestModule();
test.host = mongo.hostname;
test.dbs = mongo.db;
test.time = new Date();
test.save( function( err ) {
if (!err) {
console.log( 'save complete' )
}
else {
console.log( 'save error = ' + err )
}
});
注:save方法相当于SQL的Insert语句,同时Mongoose还定义了回调函数
以供使用。
运行:
使用mongod --dbpath的方式连接到本地的MongoDB。
定位到test-cf根目录,在cmd中键入:node index.js。
在浏览器中访问http://localhost:3000/,在cmd中出现如下内容,则说明调用MongoDB成功。
mongodb url : mongodb://localhost:2701
/testdbServer start at http://localhost:3000
save complete
注意:
变量mongo可以不用定义为Object类型,只是为了与Cloud Foundry配合才这么处理。
Mongoose独特的Scha
补充:web前端 , JavaScript ,