基于AngularJS与Node.js的高德地图位置通讯录实现

作者:栖木

时间:2026-10-29

浏览:433

本文介绍了一个基于AngularJS、Node.js和MongoDB技术栈开发的Web应用,旨在实现基于高德地图的位置共享通讯录功能。项目采用前后端分离架构,后端服务部署于阿里云,静态资源托管于GitHub Pages。文章详细解析了前端AngularJS的模块初始化、路由配置及服务接口定义,并提供了完整的代码入口示例,展示了如何利用Angular UI Router构建多视图应用及处理HTTP请求。

文章目录

项目背景与技术选型

一、闲扯

受同学需求启发,班长委托开发一款支持共享位置的通讯录应用。经过初步功能规划,涵盖了用户角色管理、微博发布及位置共享等核心模块。出于对AngularJS技术的实践目的,最终确定采用Node.js、MongoDB与Angular.js组合的技术方案。在开发过程中,对Node.js的服务架构有了更深的理解。回顾去年Leader的建议,即每个Node服务应专注于单一业务功能以利于维护,起初对此持保留态度,试图构建功能强大的单体服务。如今看来,这种单一职责的服务划分策略是正确的,这也促使我在项目中坚持将Node服务功能模块化、单一化。

部署架构与项目资源

二、直接上干货

在基础设施部署方面,数据库服务托管于阿里云平台,而静态文件服务器则选用GitHub Pages进行托管。

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

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

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

(1)首页

项目背景与技术选型

(2)通讯录

项目背景与技术选型

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

项目结构与代码实现

三、项目

总项目: 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和共享代码,一起构建前端而努力。

AngularJS入口与路由配置

四、附上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: ''
 }
 }
 });
}]);

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章