安装好nodejs,mongodb,具体方法请自行搜索(mac osx 使用 homebrew安装mongodb后,一些小问题的解决方案)
mongoose的好处:防止在大量并发的情况下出错;让nodejs更容易操作mongodb数据库。最大的特色就是对象模型。
在确认已经安装了node之后(下载), 在你的机器上创建一个目录
$ mkdir hello-world
在这个目录中创建一个package.json文件, 这个文件是你整个程序的一个简介,其中最重要的是 dependencise
,它确定你的这个应用依赖哪些包,以便下载。版本号根据自己下载的版本修改,防止将来版本更新导致无法正确运行。—— `~'代表接近的版本号,'>='表示大于等于的版本号,其他<=符号都通用
{
"name": "hello-world",
"description": "hello world test app",
"version": "0.0.1",
"private": true,
"dependencies": {
"express": "~4.12.0",
"mongoose": "~3.8.24",
"ejs": "~2.3.1",
"body-parser": "~1.12.0",
}
}
进入package.json的目录,运行
$ npm install
当npm完成后,你的应用所需的依赖就安装到你的 ./node_modules 目录里了。
创建一个名为app.js的文件
//实例化一个express对象以供使用
var express = require('express');
var app = express();
//当使用get方法获取'/'地址的时候,返回helloword。这里req是从客户端发送到服务端的请求对象,res是服务端的响应对象,req和res的具体使用方法,请到express官方api文档了解http://expressjs.jser.us/
app.get('/', function(req, res){
res.send('Hello World');
});
//监听3000端口
var server = app.listen(3000, function() {
console.log('Listening on port %d', server.address().port);
});
下面运行app.js
$ node app.js
打开你的浏览器,输入http://localhost:3000,helloworld就出现了
创建一个名为mongo.js的文件
var mongoose = require('mongoose'),
//mongoose.connect(uri, options); uri的更多格式请查看mongoose官方api文档http://mongoosejs.com/docs/api.html#index_Mongoose-connect
var db = mongoose.connect('mongodb://localhost:27017/test').connection;
//一旦建立连接,则会触发
db.on('connected', function () {
console.log('Mongoose connected to ' + uri);
});
//一旦该连接发生错误,则会触发
db.on('error',function (err) {
console.log('Mongoose connection error: ' + err);
});
//一旦该连接被关闭,则会触发
db.on('disconnected', function () {
console.log('Mongoose disconnected');
});
module.exports = mongoose;
关于建立超过两个数据库的连接方法 即 mongoose.connect 和 mongoose.creatConnection的区别。
connect和createConnection都能 连接mongodb数据库,支持以URI或参数(host,database,port)的形式。
var mongoose = require('mongoose');
mongoose .connect('mongodb://www.csser.com/csser.com_database');
连接一旦建立成功,该连接实例的open事件就被触发。如果你使用的是mongoose.connect方式,连接对象为mongoose.connection;否则,mongoose.createConnection返回的是Connection对象。
如果你打开一个单独的连接使用mongoose.createConnection(), 但试图访问模型mongoose.model(“ModelName '),则不能按预期工作,因为它不是连接到一个活跃的数据库连接。
在这种情况下通过创建的连接访问您的模型(是可以成功的):
var conn = mongoose.createConnection('your connection string'),
MyModel = conn.model('ModelName', schema),
m = new MyModel;
m.save(); // works
下面这种是错误的:
var conn = mongoose.createConnection('your connection string'),
MyModel = mongoose.model('ModelName', schema),
m = new MyModel;
m.save(); //doesn't work
Schema是什么?就是MVC架构中的M——model。看看具体代码也许你就能明白了
设置好Schema后,就可以很方便的往数据库中插入信息了 创建一个名为userModel.js的文件,这是一个社交网站的用户信息
var mongoose = require('./mongo'),
Schema = mongoose.Schema;
//每个用户都一个好友列表
//Schema的定义中,可以初始化一些选项,在options的字段中:
//`_id` :默认为true,是否自动生成主键,是存入mongodb中的id,确保数据的唯一性。当某个Schema只是嵌入别的Schema中而不需要单独存入mongodb的时候,可以设置为false。
//`collection`: 自定义存入数据库的collection的名字
var friendSchema = Schema({
userid: Number,
icon: {type:String,default:'default/heads/default.jpg'},
nickname: String,
remark: String,
status: Number//0-正在验证中,1-成功成为好友,2-其他情况
}, {_id: false}),
//会存入数据库的用户信息结构
userSchema = Schema({
userid: Number,
password: String,
nickname: String,
status: Number,//0-离线,1-在线,2-离开,3-隐身
icon: {type:String,default:'default/heads/default.jpg'},
email: String,
add: Number,//0-随意加,1-需要认证消息,2-不允许任何人加
birth: Date,
gender: Number,//0-女,1-男,2-保密
friends: [friendSchema],
regtime: {type: Date, default: Date.now}
}, {collection: 'users', });
module.exports = mongoose.model('Users', userSchema)
创建一个名为userControl.js的文件,目的是为了定义 User的 插入函数
var mongoose = require('mongoose');
var User = require('./userModel');
var user = new User(),
U = module.exports;
//将需要被保存的user对象传入,在调用save插入数据库,如果插入成功,控制台会输出刚刚插入的user对象
U.insert = function (user) {
var u = new User(user);
u.save(function (err, newUser) {
if (err) return console.error(err);
console.log(newUser);
})
}
创建一个名为 index.ejs 的文件 随意写一个表单用做测试,注意:input的name要和设置的Schema的字段相同
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Examplestitle>
head>
<body>
<form action="/" method="post">
<input type="text" value="444792006" name='userid'>
<input type="text" value="123" name='password'>
<button>submitbutton>
form>
<script>script>
body>
html>
创建一个名为 app.js 的文件
//bodyParser是用来解析post的请求体的,属于express的一部分,但是需要另外引入
var mongoose = require('./mongo'),
User = require('./userControl'),
express = require('express'),
ejs = require('ejs'),
bodyParser = require('body-parser'),
app = express();
//设置view模板所在的目录
app.set('views',__dirname);
// 设置模板引擎,如果不设置没办法渲染,这里我们用的是ejs模版引擎
app.set('view engine', 'ejs');
app.use(bodyParser());
app.get('/',function(req, res){
res.render('index')
});
app.post('/', function(req, res){
//执行插入操作
User.insert(req.body);
});
var server = app.listen(3000, function() {
console.log('Listening on port %d', server.address().port);
});
运行app.js
$ node app.js
打开http://localhost:3000,提交表单,然后看看控制台是不是提交成功了