News新闻

业界新闻动态、技术前沿
Who are we?

您的位置:首页      JS/JQ/AJAX      nodejs入门

nodejs入门

发布日期:2014-04-25 00:00:00 784

目录:

 
一、关于nodejs
 
  Node.js (http://nodejs.org/)是一个基于Chrome JavaScript 运行时建立的一个平台, 用来方便地搭建快速的, 易于扩展的网络应用。Node.js 借助事件驱动, 非阻塞 I/O 模型变得轻量和高效, 非常适合 run across distributed devices 的 data-intensive 的实时应用。
 
  express(http://expressjs.com/)应用于nodejs的一个很火的web应用框架。
 
  npm(https://www.npmjs.org/)nodejs包管理器。
 
二、nodejs案例开发完整流程
 
  此案例主要是调用百度地图api实现一个基于当前坐标的周边生活搜索和交通导航。
 
1、用到的开发环境:
 
os:windows7(x64)
 
软件:mongodb(v2.6.0)、nodejs(v0.10.26)、npm(v1.2.19)、 express(v3.5.0)
 
2、完整流程
 
 2.1、在win7下安装运行mongodb
 
  2.1.1、css,js,img)
routes,路由文件(MVC中的C,controller)
Views,页面文件(Ejs模板)
 
3.2、ejs模板的使用
让ejs模板文件使用扩展名为html的文件。
修改app.js文件:
app.engine('.html', require('ejs').__express);
app.set('view engine', 'html');
//app.set('view engine', 'ejs');
 
 3.3、然后将项目中view文件夹中的所有以.ejs为后缀的文件另成为以.html为后缀的文件,另存为时编码格式必须为utf-8(否则启动工程以后,凡是含有中文的页面都会出现乱码)!!!
 
 3.4、nodejs项目中的路由功能
 
  3.4.1、在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.2、然后打开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.5、功能模块的介绍
 
  3.5.1、登录模块
 
  登录模块中的功能主要是,在数据存储方面通过mongodb实现本web应用中session数据的存储。
 
  3.5.2、调用百度地图api实现当前坐标的周边搜索和公交导航功能
 
  1、百度地图API(http://developer.baidu.com/map/)
 
  百度地图JavaScript API是一套由JavaScript语言编写的应用程序接口,可帮助我们在网站中构建功能丰富、交互性强的地图应用。
 
  2、实现该功能的大致流程是通过给定的地址解析地址对应的经纬度坐标,然后在经纬度坐标出添加覆盖物类:图像标注,给图像标注添加click事件监听函数,在点击目标图像标注时生成当前地址对应的SearchInfoWindow信息窗口工具。而后就可以通过此信息窗口工具搜索当前地址周边的生活娱乐场所,同时也提供搜索当前地址到目标地址的交通导航方案。实现此功能时主要用到的百度地图api如下:
 
  1、Web服务API>Geocoding API  
 
  2、JavaScript API>类参考 Class:覆盖物类/Marker
 
  3、JavaScript API>开发指南>工具>SearchInfoWindow
 
注:百度地图API中的工具类已经被制作成开源库(lib)对外免费开放,可直接访问JavaScript 开源库。若功能模块中使用了工具类,则需要确认已在开发工程中引入lib文件,具体引用方法可查看JavaScript 开源库提供的示例源文件。注意,开源库必须与百度地图JS API同时使用。
 
三、nodejs相关知识的学习 
 
1、nodejs支持的模板
 
  主要是ejs和jade(调侃下,本田有款车也叫jade,呵呵),其中jade是nodejs的默认模板。这两个模板个人学习运用的都还不够深入,所以只能在网上找找其他大牛的使用感受(至于对与错还需要进一步的验证):
 
  一个node官方的主流template engine的对比说明:http://paularmstrong.github.io/node-templates/
 
  如何选择 EJS 和 Jade?:http://www.zhihu.com/question/20355486
 
2、jade模板的学习
 
  jade模板的语法规范初看起来不大适应,但学习起来还是比较好上手的。jade官网中提供了调用jade模板的方法和jade的详细api说明:http://jade-lang.com/api/
 
3、下面是笔者学习nodejs开发的第一个web应用和网上一些较好的nodejs web应用的地址