AngularJS + Node.js + MongoDB开发的基于高德地图位置的通讯录


Posted in Javascript onJanuary 02, 2015

一、闲扯

有一天班长说了,同学们希望我开发一个可以共享位置的通讯录,于是自己简单设计了下功能。包括用户角色、发表微博、共享位置等等。这次也是有点私心的,为了锻炼最近看的angularjs,于是果断选择Node.js + MongoDB + angular.js的方案。当然,开发Node.js的体会越来越深刻。记得,去年leader告诉我说尽量让node的每一个服务只支撑一个业务功能,这样才能更方便的维护。当时特别想把一个Node服务做的特别强大。现在看来leader的做法是对的,我更加倾向于把node服务功能单一化...

二、直接上干货

数据库服务部署在阿里云;静态文件服务器采用的是Github page。

Github项目地址:https://github.com/vczero/OurTimes

线上体验地址:http://vczero.github.io/tuban/main.html#/

没图说个球啊,上图给大家看看2张截图:

(1)首页

AngularJS + Node.js + MongoDB开发的基于高德地图位置的通讯录

(2)通讯录

AngularJS + Node.js + MongoDB开发的基于高德地图位置的通讯录

 ....更多去线上体验...

三、项目

总项目: https://github.com/vczero/OurTimes

开发了所需要的服务:https://github.com/vczero/OurTimes/tree/master/server

开了web pc client: https://github.com/vczero/OurTimes/tree/master/client-web

开发了简易的后台管理系统:https://github.com/vczero/OurTimes/tree/master/client-admin

欢迎大家fork ,follow和共享代码,一起构建前端而努力。

四、附上web-pc端Angular的入口文件代码

var app = angular.module('app', ['ui.router', 'ngCookies']);

var SERVER_BASE_URL = 'http://127.0.0.1:3000/';

//初始化配置

app.run(['$rootScope', function($rootScope) {

    $rootScope.appName = '图班网';

    $rootScope.desc = '基于位置的通讯录';

    $rootScope.author = '鬼谣';

    $rootScope._email = 'wlhmyit@126.com';

}]);
//调用的服务列表

app.constant('ServiceConfig', {

    wei_content: SERVER_BASE_URL + 'wei/get',

    wei_zan: SERVER_BASE_URL + 'wei/zan',

    wei_comment: SERVER_BASE_URL + 'wei/comment',

    wei_create: SERVER_BASE_URL + 'wei/create',

    user_get: SERVER_BASE_URL + 'user/get',

    user_login: SERVER_BASE_URL + 'user/login',

    user_register: SERVER_BASE_URL + 'user/register',

    user_common: SERVER_BASE_URL + 'user/getCommon',

    user_ben: SERVER_BASE_URL + 'user/getBen',

    user_self: SERVER_BASE_URL + 'user/getSelf',

    user_common_update: SERVER_BASE_URL + 'user/updateCommon',

    user_ben_update: SERVER_BASE_URL + 'user/updateBen',

    user_ben_get_name: SERVER_BASE_URL + 'user/singleBen/name',

    user_common_get_nickname: SERVER_BASE_URL + 'user/getCommon/name',

    user_ben_get_realname: SERVER_BASE_URL + 'user/singleBen/name',

    wei_get_token_page: SERVER_BASE_URL + 'wei/getByToken',

    wei_delete: SERVER_BASE_URL + 'wei/delete',

    user_update_password: SERVER_BASE_URL + 'user/updatePassword',

    article_get: SERVER_BASE_URL + 'article/get',

    article_detail: SERVER_BASE_URL + 'article/get/id',

    amap_url: 'http://webapi.amap.com/maps?v=1.3&key=ad925c5003760094713775d64748d872&callback=init'

});

//JSON parse

app.config(['$httpProvider', function($httpProvider) {

    $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';

    $httpProvider.defaults.headers.put['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';

    $httpProvider.defaults.transformRequest = [function(data) {

        var obj = [];

        for (var key in data) {

            obj.push(key + '=' + data[key]);

        }

        return obj.join('&');

    }];

}]);

//路由配置

app.config(['$stateProvider', '$urlRouterProvider', 

function($stateProvider, $urlRouterProvider) {

    /*URL路由*/

    $urlRouterProvider.otherwise("/");

    /*状态配置*/

    $stateProvider

    //首页

    .state('index', {

        url: '/',

        views: {

            '': {

                templateUrl: 'views/index/index.html',

            },

            'header@index': {

                templateUrl: 'views/header.html',

                controller: 'HeaderController'

            },

            'footer@index': {

                templateUrl: 'views/footer.html',

                controller: ''

            },

            'weibo@index': {

                templateUrl: 'views/index/weibo.html',

                controller: 'WeiboController'

            },

            'article@index': {

                templateUrl: 'views/index/article.html',

                controller: 'ArticleController'

            },

            'post@index': {

                templateUrl: 'views/index/post.html',

                controller: 'PostWeiboController'

            }

        }

    })

    .state('login', {

        url: '/login',

        views: {

            '': {

                templateUrl: 'views/login/login.html',

                controller: 'LoginController'

            }

        }

    })

    .state('register', {

        url: '/register',

        views: {

            '': {

                templateUrl: 'views/register/register.html',

                controller: 'RegisterController'

            }

        }

    })

    .state('contacts', {

        url: '/contacts',

        views: {

            '': {

                templateUrl: 'views/contacts/contacts.html',

                controller: ''

            },

            'header@contacts': {

                templateUrl: 'views/header.html',

                controller: 'HeaderController'

            },

            'userinfo@contacts': {

                templateUrl: 'views/contacts/userinfo.html',

                controller: 'UserInfoController'

            },

            'map@contacts': {

                templateUrl: 'views/contacts/map.html',

                controller: 'MapController'

            },

            'search@contacts': {

                templateUrl: 'views/contacts/search.html',

                controller: 'SearchUserController'

            }

        }

    })

    .state('ucenter', {

        url: '/ucenter',

        views: {

            '': {

                templateUrl: 'views/ucenter/ucenter.html',

                controller: ''

            },

            'header@ucenter': {

                templateUrl: 'views/header.html',

                controller: 'HeaderController'

            },

            'userWeibo@ucenter': {

                templateUrl: 'views/ucenter/weibo.html',

                controller: 'UcWeiboController'

            },

            'userDetailInfo@ucenter': {

                templateUrl: 'views/ucenter/user.html',

                controller: 'UcUserController'

            },

            'footer@ucenter': {

                templateUrl: 'views/footer.html',

                controller: ''

            }

        }

    })

    .state('article', {

        url: '/article/:id',

        views: {

            '': {

                templateUrl: 'views/article/article.html',

                controller: ''

            },

            'header@article': {

                templateUrl: 'views/header.html',

                controller: 'HeaderController'

            },

            'article_content@article': {

                templateUrl: 'views/article/article_content.html',

                controller: 'ArticleDetailController'

            },

            'footer@article': {

                templateUrl: 'views/footer.html',

                controller: ''

            }

        }

    })

    .state('article_index', {

        url: '/article',

        views: {

            '': {

                templateUrl: 'views/article/article.html',

                controller: ''

            },

            'header@article_index': {

                templateUrl: 'views/header.html',

                controller: 'HeaderController'

            },

            'article_content@article_index': {

                templateUrl: 'views/article/article_content.html',

                controller: 'ArticleDetailController'

            },

            'footer@article_index': {

                templateUrl: 'views/footer.html',

                controller: ''

            }

        }

    });
}]);
Javascript 相关文章推荐
根据鼠标的位置动态的控制层的位置
Nov 24 Javascript
到处都是jQuery选择器的年代 不了解它们的性能,行吗
Jun 18 Javascript
JS实现日期加减的方法
Nov 29 Javascript
js弹出确认是否删除对话框
Mar 27 Javascript
jquery实现倒计时代码分享
Jun 13 Javascript
Bootstrap CSS布局之表格
Dec 17 Javascript
利用js查找数组中指定元素并返回该元素的所有索引示例
Mar 29 Javascript
使用JS在浏览器中判断当前网络连接状态的几种方法
May 05 Javascript
javascript 初学教程及五子棋小程序的简单实现
Jul 04 Javascript
微信小程序全局变量功能与用法详解
Jan 22 Javascript
layui使用及简单的三级联动实现教程
Dec 01 Javascript
vue使用element-ui实现表单验证
Dec 13 Vue.js
javascript制作的cookie封装及使用指南
Jan 02 #Javascript
分享一则javascript 调试技巧
Jan 02 #Javascript
javascript实现无限级select联动菜单
Jan 02 #Javascript
javascript实现表格排序 编辑 拖拽 缩放
Jan 02 #Javascript
原生javascript实现DIV拖拽并计算重复面积
Jan 02 #Javascript
javascript使用smipleChart实现简单图表
Jan 02 #Javascript
原生javascript实现简单的datagrid数据表格
Jan 02 #Javascript
You might like
paypal即时到账php实现代码
2010/11/28 PHP
js checkbox(复选框) 使用集锦
2009/04/28 Javascript
jquery键盘事件使用介绍
2011/11/01 Javascript
一些常用弹出窗口/拖放/异步文件上传等实用代码
2013/01/06 Javascript
jQuery封装的获取Url中的Get参数示例
2013/11/26 Javascript
了解Javascript的模块化开发
2015/03/02 Javascript
javascript瀑布流布局实现方法详解
2016/02/17 Javascript
jquery移除了live()、die(),新版事件绑定on()、off()的方法
2016/10/26 Javascript
使用jsonp实现跨域获取数据实例讲解
2016/12/25 Javascript
JS实现获取图片大小和预览的方法完整实例【兼容IE和其它浏览器】
2017/04/24 Javascript
Angular.js中上传指令ng-upload的基本使用教程
2017/07/30 Javascript
AngularJS使用ui-route实现多层嵌套路由的示例
2018/01/10 Javascript
vuex state及mapState的基础用法详解
2018/04/19 Javascript
vscode配置vue下的es6规范自动格式化详解
2019/03/20 Javascript
解决layui轮播图有数据不显示的情况
2019/09/16 Javascript
简单了解微信小程序 e.target与e.currentTarget的不同
2019/09/27 Javascript
微信小程序换肤功能实现代码(思路详解)
2020/08/25 Javascript
原生js实现分页效果
2020/09/23 Javascript
vue+iview使用树形控件的具体使用
2020/11/02 Javascript
Python通过matplotlib画双层饼图及环形图简单示例
2017/12/15 Python
Python中str.join()简单用法示例
2018/03/20 Python
TensorFlow 模型载入方法汇总(小结)
2018/06/19 Python
python把数组中的数字每行打印3个并保存在文档中的方法
2018/07/17 Python
Flask之flask-script模块使用
2018/07/26 Python
在Mac下使用python实现简单的目录树展示方法
2018/11/01 Python
在django view中给form传入参数的例子
2019/07/19 Python
python+Django+pycharm+mysql 搭建首个web项目详解
2019/11/29 Python
Python统计时间内的并发数代码实例
2019/12/28 Python
Python基于gevent实现高并发代码实例
2020/05/15 Python
AmazeUI 导航条的实现示例
2020/08/14 HTML / CSS
模具专业推荐信
2013/10/30 职场文书
餐饮管理自我介绍信
2014/01/15 职场文书
卫生保健工作总结2015
2015/05/18 职场文书
2015年法务工作总结范文
2015/05/23 职场文书
2015年秋季小学开学标语
2015/07/16 职场文书
【D4DJ】美少女DJ企划 动画将于明年冬季开播第2季
2022/04/11 日漫