MEAN,从MONGO DB里弄出点东东来啦,以REST风格显示JSON
最近一直在弄弄的。。。
javascript的风格弄熟了,我觉得肯定很快,,但心中有种感觉,DJANGO和MEAN这种结构,搞大的不行。
因为MVC这种结构感觉不如SPRING这些严谨,是不是我有偏见呢?水平不够呢?不强制就不弄呢?
db层写法:
/** * Created by sahara on 2016/7/5. */ var mongoose = require('mongoose'); var dbURI = 'mongodb://localhost/Loc8r'; var gracefulShutdown mongoose.connect(dbURI); mongoose.connection.on('connected', function () { console.log('Mongoose connected to ' + dbURI); }); mongoose.connection.on('error',function (err) { console.log('Mongoose connection error: ' + err); }); mongoose.connection.on('disconnected', function () { console.log('Mongoose disconnected'); }); var readLine = require ("readline"); if (process.platform === "win32"){ var rl = readLine.createInterface ({ input: process.stdin, output: process.stdout }); rl.on ("SIGINT", function (){ process.emit ("SIGINT"); }); } gracefulShutdown = function (msg, callback) { mongoose.connection.close(function () { console.log('Mongoose disconnected through ' + msg); callback(); }); }; process.once('SIGUSR2', function () { gracefulShutdown('nodemon restart', function () { process.kill(process.pid, 'SIGUSR2'); }); }); process.on('SIGINT', function () { gracefulShutdown('app termination', function () { process.exit(0); }); }); process.on('SIGTERM', function() { gracefulShutdown('Heroku app shutdown', function () { process.exit(0); }); }); require('./locations');
数据库定义:
/** * Created by sahara on 2016/7/5. */ var mongoose = require('mongoose'); var openingTimeSchema = new mongoose.Schema({ days: {type: String, required: true}, opening: String, closing: String, closed: {type: Boolean, required: true} }); var reviewSchema = new mongoose.Schema({ author:String, rating: {type: Number, required: true, min: 0, max: 5}, reviewText: String, createdOn: {type: Date, "default": Date.now} }); var locationSchema = new mongoose.Schema({ name: {type: String, required: true}, address: String, rating: {type: Number, "default": 0, min: 0, max: 5}, facilities: [String], coords: {type: [Number], index: '2dsphere'}, openingTimes: [openingTimeSchema], reviews: [reviewSchema] }); mongoose.model('Location', locationSchema);
路由层写法:
var express = require('express'); var router = express.Router(); var ctrlLocations = require('../controllers/locations'); var ctrlReviews = require('../controllers/reviews'); //locations router.get('/locations', ctrlLocations.locationsListByDistance); router.post('/locations', ctrlLocations.locationsCreate); router.get('/locations/:locationid', ctrlLocations.locationsReadOne); router.put('/locations/:locationid', ctrlLocations.locationsUpdateOne); router.delete('/locations/:locationid', ctrlLocations.locationsDeleteOne); //reviews router.post('/locations/:locationid/reviews', ctrlReviews.reviewCreate); router.get('/locations/:locationid/reviews/:reviewid', ctrlReviews.reviewReadOne); router.put('/locations/:locationid/reviews/:reviewid', ctrlReviews.reviewUpdateOne); router.delete('/locations/:locationid/reviews/:reviewid', ctrlReviews.reviewDeleteOne); module.exports = router
控制器写法:
/** * Created by sahara on 2016/7/6. */ var mongoose = require('mongoose'); var Loc = mongoose.model('Location'); var sendJsonResponse = function(res, status, content) { res.status(status); res.json(content); }; module.exports.locationsListByDistance = function (req, res) { sendJsonResponse(res, 200, {"status" : "success"}); }; module.exports.locationsCreate = function (req, res) { sendJsonResponse(res, 201, {"status" : "success"}); }; module.exports.locationsReadOne = function (req, res) { if (req.params && req.params.locationid){ Loc .findById(req.params.locationid) .exec(function(err, location){ if (!location) { sendJsonResponse(res, 404, { "message": "locationid not found" }); return; } else if (err) { sendJsonResponse(res, 404, err); return; } sendJsonResponse(res, 200, location); }); } else { sendJsonResponse(res, 404, { "message": "no locationid in request" }); } }; module.exports.locationsUpdateOne = function (req, res) { sendJsonResponse(res, 200, {"status" : "success"}); }; module.exports.locationsDeleteOne = function (req, res) { sendJsonResponse(res, 204, {"status" : "success"}); };
app.js的改装:
var express = require('express'); var path = require('path'); var favicon = require('serve-favicon'); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); require('./app_api/models/db'); var routes = require('./app_server/routes/index'); var routesApi = require('./app_api/routes/index'); var users = require('./app_server/routes/users'); var app = express(); // view engine setup app.set('views', path.join(__dirname, 'app_server', 'views')); app.set('view engine', 'jade'); // uncomment after placing your favicon in /public //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); app.use('/', routes); app.use('/api', routesApi); app.use('/users', users); // catch 404 and forward to error handler app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err); }); // error handlers // development error handler // will print stacktrace if (app.get('env') === 'development') { app.use(function(err, req, res, next) { res.status(err.status || 500); res.render('error', { message: err.message, error: err }); }); } // production error handler // no stacktraces leaked to user app.use(function(err, req, res, next) { res.status(err.status || 500); res.render('error', { message: err.message, error: {} }); }); module.exports = app;
MEAN,从MONGO DB里弄出点东东来啦,以REST风格显示JSON的更多相关文章
- mongo DB for C#
(1)Download the MongoDB C#驱动. http://www.nuget.org/packages/mongocsharpdriver/. (2) Add Reference to ...
- json是个啥东东
xml 不用说 只要是搞web开发的 没听说谁不知道的 一种类似数据传输格式定义的语言 但是他却不是一个真正的轻量级的东西 其他的不说 只要传输一点很少的数据 经过他那左括号右括号 还有什么属性 一包 ...
- 长见识了,知道了collected和Graphite 这两个东东
今天下午的讨论会议中,听到了两个名词collected和Graphite这是神马东东,以前在bingo的时候也没听说过,开完会下去查了下.原来他两是监控系统的啊.以前也从来没做过系统监控方面的项目,这 ...
- Mongo DB 2.6 需要知道的一些自身限定
在现实的世界中,任何事情都有两面性,在程序的世界中,亦然! 我们不论是在使用一门新的语言,还是一门新的技术,在了解它有多么的让人兴奋,让人轻松,多么的优秀之余,还是很有必要了解一些他的局限性,方便你在 ...
- Mongo DB Study: first face with mongo DB
Mongo DB Study: first face with mongo DB 1. study methods: 1. Translate: I am the mongo DB organiz ...
- BPEL是个什么东东
研究团队有个做智能服务组合的,其中用到叫BPEL的东西,因为全称是Business Process Execution Language,译成中文就是商业执行过程语言,这个东东的是整合SOA的一个执行 ...
- SQLSERVER 里经常看到的CACHE STORES是神马东东?
SQLSERVER 里经常看到的CACHE STORES是神马东东? 当我们在SSMS里执行下面的SQL语句清空SQLSERVER的缓存的时候,我们会在SQL ERRORLOG里看到一些信息 DBCC ...
- mongo db 分享 ppt
在公司内部的mongo db的ppt.初步进阶 http://files.cnblogs.com/files/yuhan-TB/mongoDB.pptx
- Mongo DB 安装-及分布式集群部署(初稿)
一.安装步骤, 1, 下载最新的Mongo DB数据库:http://www.mongodb.org/downloads?_ga=1.44426535.2020731121.1421844747\ 下 ...
随机推荐
- 基于.Net Core的API框架的搭建(2)
4.加入数据库支持 下面我们为项目加入数据库支持,修改appsettings.json: 然后我们要生成实体类,打开VS工具->NuGet包管理器->程序包管理器控制台: 输入命令: Sc ...
- STL---vector的内存分配策略
2级策略,过程如下: 第一级 __malloc_alloc_template内存分配器 该分配器是对malloc.realloc以及free的封装: 第二级 __default_alloc_temp ...
- 这样的设计是否有违背MVC设计原则??
MVC 皆知为 Model-View-Controller 请求模型-〉Client发现请求-〉Controller接收+处理-〉返回Model给前端-〉前端接收处理模型Result 但是最近发现一个 ...
- Android ListView动态刷新某项Item
使用ViewHolder来刷新某项数据,而不用每次都全部刷新数据. 继承BaseAdapter,新建ViewHolder类. public class TestListAdapter extends ...
- 动态排序JavaBean
Java中如果对对象排序可以考虑实现Comparable接口,但是需要排序的属性一旦指定就不能再修改.BeanUtils组件提供了对JavaBean动态排序的支持,即可以在运行时指定排序的属性.实例运 ...
- 华硕(ASUS)X554LP笔记本在64位win7下无线网络连接问题
还是那台华硕(ASUS)X554LP笔记本,无线网卡为 Qualcomm Atheros AR956x,某天换了个环境,WIFI(此处简称为WIFI网A)就连不上网了.手机.其它笔记本用无线连接都没问 ...
- Farseer.net轻量级开源框架 中级篇:动态数据库访问
导航 目 录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 中级篇: 自定义配置文件 下一篇:Farseer.net轻量级开源框架 中级篇: 数据库切换 ...
- 【sqli-labs】 对于less34 less36的宽字节注入的一点深入
1.AddSlashes() 首先来观察一下是如何通过构造吃掉转义字符的 先将less 34的网页编码换成gbk 加上一些输出 echo "Before addslashes(): &quo ...
- Java Servlet JSP编程(一)
最近想学学java编程,java现在的应用还是挺广泛的,有必要学习一下. # index.jsp <%@ page language="java" contentType=& ...
- HDU_1864_最大报销额_01背包
最大报销额 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status ...