目录:php
1、关于nodejscss
Node.js (http://nodejs.org/)是一个基于Chrome JavaScript 运行时创建的一个平台, 用来方便地搭建快速的, 易于扩展的网络应用。Node.js 借助事件驱动, 非阻塞 I/O 模型变得轻量和高效, 很是适合 run across distributed devices 的 data-intensive 的实时应用。html
express(http://expressjs.com/)应用于nodejs的一个很火的web应用框架。node
npm(https://www.npmjs.org/)nodejs包管理器。git
2、nodejs案例开发完整流程github
此案例主要是调用百度地图api实现一个基于当前坐标的周边生活搜索和交通导航。web
一、用到的开发环境:mongodb
os:windows7(x64)数据库
软件:mongodb(v2.6.0)、nodejs(v0.10.26)、npm(v1.2.19)、 express(v3.5.0)express
二、完整流程
2.一、在win7下安装运行mongodb
2.1.一、下载mongodb
经过网址https://www.mongodb.org/dr//fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-2.6.0.zip/download下载mongodb,而后解压。
程序文件都在bin目录中,bin目录主要包括以下几个程序:
1. mongo.exe,命令行客户端工具。
2. mongod.exe,数据库服务程序。
3. mongodump.exe,数据库备份程序。
4. mongoexport.exe,数据导出工具。
5. mongofiles.exe,GridFS工具。
6. mongoimport.exe,数据导入工具。
7. mongorestore.exe,数据库恢复工具。
8. mongos.exe,貌似是性能检测工具。
2.1.二、设置mongodb目录和数据文件路径
将其解压到 e:\,再重命名为mongodb,路径为e:\mongodb;在e:\mongodb\路径下新建一个data文件夹,在data文件夹中新建db文件夹,路径e:\mongodb\data\db。
2.1.三、启动mongodb
进入cmd提示符控制台,输入命令E:\mongodb\bin\mongod.exe --dbpath=e:\mongodb\data\db
2.二、下载安装nodejs
2.2.一、点击http://nodejs.org/download/下载.exe的nodejs安装文件。
2.2.二、在e:\建立文件夹nodejs,而后将下载的node.exe文件放入e:\nodejs\路径下,并在系统环境变量Path中加入“E:\nodejs;” 便于在任意位置执行node应用。
2.三、下载安装npm
2.3.一、在https://github.com/isaacs/npm/tags中下载相应的npm zip包
2.3.二、在e:\新建npmjs文件夹,将npm源代码解压到e:\npmjs目录中。
在命令提示符窗口中执行下面的操做,完成npm的安装:
cd e:\npmjs
node cli.js install -gf
另外:
node cli.js install npm -gf //能够安装最新版的NPM
node cli.js install npm@1.0.105 -gf //能够安装指定版本的NPM
2.3.三、NPM安装完成后,将"e:\nodejs\node_modules"加入系统环境变量NODE_PATH中。
2.四、安装express
在命令提示符窗口中执行 npm install express -g //全局安装最新版express
2.五、建立nodejs工程目录并建立一个nodejs示例项目
在e:\下建立nodejsworkspace\project,进入工程目录使用express建立一个使用默认模板引擎的nodejs项目:
cd e:\nodejsworkspace\projcet
express node-demo
根据提示,下载该项目的依赖包
示例项目创建成功,启动示例项目
E:\nodejsworkspace\project\node-demo>node app.js
本地的3000端口被打开,经过浏览器访问: localhost:3000。经过node启动程序,每次代码修改都须要从新启动。 有一个工具supervisor,每次修改代码后会自动重启,会为咱们开发省不少的时间。
经过npm安装supervisor:
npm install supervisor
再次启动项目:
supervisor app.js
三、示例项目的改进
经过 express -e nodejs-demo 建立支持ejs模板的nodejs项目:
package.json,项目依赖配置及开发者信息
app.js,程序启动文件
public,静态文件(css,js,img)
routes,路由文件(MVC中的C,controller)
Views,页面文件(Ejs模板)
3.二、ejs模板的使用
让ejs模板文件使用扩展名为html的文件。
修改app.js文件:
3.一、目录结构:
node_modules, 存放所本项目的全部依赖库
app.engine('.html', require('ejs').__express);
app.set('view engine', 'html');
//app.set('view engine', 'ejs');
3.三、而后将项目中view文件夹中的全部以.ejs为后缀的文件另成为以.html为后缀的文件,另存为时编码格式必须为utf-8(不然启动工程之后,凡是含有中文的页面都会出现乱码)!!!
3.四、nodejs项目中的路由功能
3.4.一、在app.js文件中进行工程的路由配置:
相似的语句以下:
var routes = require('./routes');
var user = require('./routes/user');
var blog = require('./routes/blog');
var interface = require('./routes/interface');
app.get('/', routes.index);
app.all('/login', notAuthentication);
app.get('/login', routes.login);
app.get('/users', user.list);
app.get('/blog', blog.index);
app.get('/lbs', interface.index );
app.get('/lbs/k/:keyword', interface.keyword );
app.get('/lbs/c/:coord', interface.coord );
app.get('/lbs/ip',interface.ip);
app.get('/lbs/init/lng/:lng/lat/:lat',interface.initl);
app.get('/lbs/init/word/:word',interface.initw);
注:get为get请求,post为post请求,all为全部针对这个路径的请求
3.4.二、而后打开routes/index.js文件,增长对应的方法:
exports.index = function (req, res) {
res.render('index', {
title: 'Index of Baidumap'
});
};
exports.login = function (req, res) {
if(req.session.uer){
return res.redirect('/home');
}
else{
res.render('login', { title: '用户登录'});
}
};
综合3.4.1和3.4.2来看,能够这么理解,当咱们经过浏览器访问http://localhost:3000/时,实际是经过app.js文件中的app.get('/', routes.index)语句定位到了routes/index.js文件中的exports.index语句,此时服务器就向客户端传回了views文件夹下的index.html页面。
3.五、功能模块的介绍
3.5.一、登陆模块
登陆模块中的功能主要是,在数据存储方面经过mongodb实现本web应用中session数据的存储。
3.5.二、调用百度地图api实现当前坐标的周边搜索和公交导航功能
一、百度地图API(http://developer.baidu.com/map/)
百度地图JavaScript API是一套由JavaScript语言编写的应用程序接口,可帮助咱们在网站中构建功能丰富、交互性强的地图应用。
二、实现该功能的大体流程是经过给定的地址解析地址对应的经纬度坐标,而后在经纬度坐标出添加覆盖物类:图像标注,给图像标注添加click事件监听函数,在点击目标图像标注时生成当前地址对应的SearchInfoWindow信息窗口工具。然后就能够经过此信息窗口工具搜索当前地址周边的生活娱乐场所,同时也提供搜索当前地址到目标地址的交通导航方案。实现此功能时主要用到的百度地图api以下:
二、JavaScript API>类参考 Class:覆盖物类/Marker
三、JavaScript API>开发指南>工具>SearchInfoWindow
注:百度地图API中的工具类已经被制做成开源库(lib)对外免费开放,可直接访问JavaScript 开源库。若功能模块中使用了工具类,则须要确认已在开发工程中引入lib文件,具体引用方法可查看JavaScript 开源库提供的示例源文件。注意,开源库必须与百度地图JS API同时使用。
3、nodejs相关知识的学习
一、nodejs支持的模板
主要是ejs和jade(调侃下,本田有款车也叫jade,呵呵),其中jade是nodejs的默认模板。这两个模板我的学习运用的都还不够深刻,因此只能在网上找找其余大牛的使用感觉(至于对与错还须要进一步的验证):
一个node官方的主流template engine的对比说明:http://paularmstrong.github.io/node-templates/
如何选择 EJS 和 Jade?:http://www.zhihu.com/question/20355486
二、jade模板的学习
jade模板的语法规范初看起来不大适应,但学习起来仍是比较好上手的。jade官网中提供了调用jade模板的方法和jade的详细api说明:http://jade-lang.com/api/
三、下面是笔者学习nodejs开发的第一个web应用和网上一些较好的nodejs web应用的地址
3.一、 https://github.com/peiyu420/baidumapAPI