nodejs api demo based on restify and mongoose

一个基于nodejs restify 和 mongoose 的 api demo

目录结构

目录结构

server.js

1
2
require('./app/core/mongoose')
require('./app/core/router')

app/core/config.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// restify server
exports.server = {
name : "restify-api demo",
host : "127.0.0.1",
port : 3000,
debug : false
}
// mongodb
exports.mongodb = {
host : "127.0.0.1",
port : 27017
}

app/core/mongoose.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
var cnf = require('./config.js');
var mongoose = require('mongoose')
, fs = require('fs')
, models_path = process.cwd() + '/app/models'
var mongodb_url = 'mongodb://' + cnf.mongodb.host + ":" + cnf.mongodb.port + '/demo';
mongoose.connect(mongodb_url, {server:{auto_reconnect:true}});
var db = mongoose.connection;
db.on('error', function (err) {
console.error('MongoDB connection error:', err);
});
db.once('open', function callback() {
console.info('MongoDB connection is established');
});
db.on('disconnected', function() {
console.error('MongoDB disconnected!');
mongoose.connect(mongodb_url, {server:{auto_reconnect:true}});
});
db.on('reconnected', function () {
console.info('MongoDB reconnected!');
});
fs.readdirSync(models_path).forEach(function (file) {
if (~file.indexOf('.js'))
require(models_path + '/' + file)
});

app/core/route.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
var cnf = require('./config.js');
var restify = require('restify');
var fs = require('fs');
var controllers = {}
, controllers_path = process.cwd() + '/app/controllers'
fs.readdirSync(controllers_path).forEach(function (file) {
if (file.indexOf('.js') != -1) {
controllers[file.split('.')[0]] = require(controllers_path + '/' + file)
}
})
var server = restify.createServer({
name: cnf.server.name
});
server.use(restify.fullResponse());
server.use(restify.bodyParser())
// bind routes start
server.get("/user", controllers.user.userlist)
// bind routes end
server.listen(cnf.server.port, cnf.server.host, function (err) {
if (err)
console.error(err)
else
console.log('%s listening at %s ', server.name , server.url);
})
if (cnf.server.debug == false){
process.on('uncaughtException', function (err) {
console.error(JSON.parse(JSON.stringify(err, ['stack', 'message', 'inner'], 2)))
})
}

app/controllers/user.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
var mongoose = require('mongoose'),
userinfo = mongoose.model("userinfo")
ObjectId = mongoose.Types.ObjectId
exports.userlist = function(req, res) {
userinfo.find(function(err, User) {
if (err) {
res.status(500);
res.json({
type: false,
data: "Error occured: " + err
})
} else {
if (User) {
res.json({
type: true,
data: User
})
} else {
res.json({
type: false,
data: "user list not found"
})
}
}
})
}

app/models/userinfo.js

1
2
3
4
5
6
7
8
var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var userinfoSchema = new Schema({
name: String,
age: Number
});
mongoose.model('userinfo', userinfoSchema);