nodejs web开发入门: Simple-TODO Nodejs 实现版

标签: 代码 学习 | 发表时间:2011-07-07 07:32 | 作者:suqian Aleafs
分享到:
出处:http://cnodejs.org/blog

起因

看到simple todo的各种python版本实现, 我也来凑凑热闹…
既然已经有这么多python版本了, 我就对比实现了一个Simple-TODO的nodejs版本: Node TODO, 模版和樣式全部copy自web.py版本.

Source Code && Demo

http://ww3.sinaimg.cn/large/6cfc7910jw1diwdadumcwj.jpg

代码目录

目录还是很清晰的, public存放静态文件, views存放模版, controllers处理业务逻辑,
还有配置config.js, web主入口server.js

代码目录

使用到的第三方nodejs模块

  • express: Web框架, 目前nodejs使用最广泛的web框架
  • ejs: 模版渲染引擎, 用于生成动态内容
  • node-mysql: 纯javascript实现的mysql驱动, 无法安装任何mysql包依赖.

这3个模块都可以直接通过npm安装获得:

$ npm install express ejs mysql

开发过程记录

config.js

可配置的信息:
* 网站名称
* 监听端口号, 默认8080
* 数据库配置信息

如何访问数据库

config.js文件里面, 会使用一下方式保持着数据库的链接对象

var db = exports.db = new require('mysql').Client(db_options);
db.connect(function(err) {
    if(err) {
        console.error('connect db ' + db.host + ' error: ' + err);
        process.exit();
    }
});

这样我们就可以在别的地方直接使用db对象了

server.js

express可以帮我们默认实现了静态文件处理, cookie处理, 请求参数处理等事情, 只需要配置一下, 就可以使用上这些功能了.

var app = express.createServer();
app.use(express.static(__dirname + '/public', {maxAge: 3600000 * 24 * 30}));
app.use(express.cookieParser());
app.use(express.bodyParser());

同样, 需要配置模版渲染引擎为ejs

app.set("view engine", "html");
app.set("views", __dirname + '/views');
app.register("html", ejs);

看看views/index.html里面的一个最复杂的模版例子,
ejs最让我喜欢的是不用再学一套语法, 直接是内嵌js, 还是很容易读懂的

http://ww1.sinaimg.cn/large/6cfc7910jw1dix6f9kailj.jpg

URL Routing与Controllers

一个http请求过来, 由那个controller处理, express提供了简便的routing方式

app.get('/', todo.index);
app.post('/todo/new', todo.new);
app.get('/todo/:id', todo.view);
app.get('/todo/:id/edit', todo.edit);
app.post('/todo/:id/edit', todo.save);
app.get('/todo/:id/delete', todo.delete);
app.get('/todo/:id/finish', todo.finish);

如添加一条todo记录: HTTP GET /new, 将由todo.new方法处理,
代码逻辑包括了title参数有效性验证, 数据保存到数据库, http redirect:

exports.new = function(req, res, next) {
    var title = req.body.title || '';
    title = title.trim();
    if(!title) {
        return res.render('error', {message: '标题是必须的'});
    }
    db.query('insert into todo set title=?, post_date=now()', [title], function(err, result) {
        if(err) return next(err);
        res.redirect('/');
    });
};

更多的controller处理逻辑请查看/controllers/todo.js.

数据库初始化及启动Web进程

$ mysql xxx
$ source ~/todo/todo.sql
$ node server.js

有爱

可以看到, 无论是python的web开发, 还是nodejs, 我们以前对web的概念还是无需改变的.
都是我们熟悉的一些关键词:
http, request, response, html, template engine, url routing, MVC, GET, POST, MYSQL, Database…

不同的是, 这里只使用javascript就可以驱动着以上的一切.

希望本文对你有用 ^_^

您可能也喜欢:

nodejs: 真正的一份代码,到处运行

nodejs-post文件上传原理详解

如何提高NodeJS程序的稳定性

Node.js简单介绍并实现一个简单的Web MVC框架

nodejs异步IO的实现
无觅

相关 [nodejs web 开发] 推荐:

nodejs web开发入门: Simple-TODO Nodejs 实现版

- Aleafs - CNode社区
看到simple todo的各种python版本实现, 我也来凑凑热闹…. 既然已经有这么多python版本了, 我就对比实现了一个Simple-TODO的nodejs版本: Node TODO, 模版和樣式全部copy自web.py版本.. 源代码: https://github.com/fengmk2/todo. 在线demo: http://api.yongwo.de:3888. 目录还是很清晰的, public存放静态文件, views存放模版, controllers处理业务逻辑,. 还有配置config.js, web主入口server.js. 使用到的第三方nodejs模块. express: Web框架, 目前nodejs使用最广泛的web框架.

eclipse配置nodejs开发环境

- - CSDN博客云计算推荐文章
首先说明一下本人的开发环境,个人兴趣爱好问题,这边使用的很多环境都是基于Linux系统下做的,这次也不例外. 前提条件:NodeJs已经在系统中正确安装. 1、下载安装eclipse,地址: http://www.eclipse.org/downloads/. Eclipse Standard 版本即可. 2、安装nodeclipse插件:. 3、javascript编辑插件 -- VJET. 4、google V8插件(调试必备). 5、安装完成重启eclipse,配置node相关信息:. 在项目中新建hello.js文件,代码如下:. respose.end('世界你好. \n'); }).listen(8080,'192.168.2.112'); console.log("服务器已经启动,地址为:http://192.168.2.112:8080");.

Geolocation和Web Sockets基于NodeJs的实战(2)

- - ria之家--RIA三部曲:jquery、ext、flex
上一篇教程明河讲解了一些NodeJs的知识点,这一篇教程将给大家讲解前端方面的知识点. Geolocation是html5中的主要内容,用于处理客户端的地理信息,特别在手持设备上有广泛的使用场景. Geolocation的简单的demo. (PS:demo中虽然实现了位置定位,但不能随着你的移动,坐标也发生变化,借助NodeJs的socket.io模块即可实现. Geolocation的兼容性情况. Geolocation兼容性还算不错,不算IE9以下,你懂的….. Geolocation的地理信息精度问题. Geolocation的主要定位方式有如下几种:. ip地址:也是web端最常用的方式,精度基本符合日常使用场景,有时可能出现定位到ISP机房的情况.

也谈基于NodeJS的全栈式开发(基于NodeJS的前端后端分离)

- - TaoBaoUED
随着不同终端(pad/mobile/pc)的兴起,对开发人员的要求越来越高,纯浏览器端的响应式已经不能满足用户体验的高要求,我们往往需要针对不同的终端开发定制的版本. 为了提升开发效率,前后端分离的需求越来越被重视,后端负责业务/数据接口,前端负责展现/交互逻辑,同一份数据接口,我们可以定制开发多个版本. 这个话题最近被讨论得比较多,阿里有些BU也在进行一些尝试. 讨论了很久之后,我们团队决定探索一套基于NodeJS的前后端分离方案,过程中有一些不断变化的认识以及思考,记录在这里,也希望看到的同学参与讨论,帮我们完善. 最开始组内讨论的过程中我发现,每个人对前后端分离的理解不一样,为了保证能在同一个频道讨论,先就什么是”前后端分离”达成一致.

nodejs快速入门

- AreYouOK? - 淘宝数据平台与产品部官方博客 tbdata.org
主要介绍了一下node.js的发展, 现状, 安装, 使用.

Web开发入门(转载)

- linchanx - Starming星光社最新更新
Web应用的竞争异常激烈,开发难度也是入门容易做好很难,所以第一次开发的应用不成功是很正常的事情. 不过这正是一个积累的过程,反正你需要的只是电脑和少量服务器经费,所以多磨练几次,水平自然会提高. 2, 习惯阅读及查阅英文资料. 前沿信息基本源自美国,翻译的东西不及时,不全,很多水平不高,再加之中文原创资料毕竟很有限,因此是否能熟练地查阅英文资料决定了你获取信息的 及时性和质量. 另外习惯用英文思考,你才能更好地用英文表达自己碰到的问题,借力StackOverflow, ServerFault, Quora这些社区. 阅读原版书,常上英文程序员社区,并且把谷歌的默认界面语言调为英文,都是强迫自己使用英文的好办法.

web开发利器之grunt

- - CSDN博客Web前端推荐文章
grunt不难,它主要依赖的是nodeJS的npm包管理器,和一个JSON及一个JS文件,先说说npm包管理器,玩过nodeJS的对它应该都很熟悉,在这里我们只需要安装nodeJS即可(新版的nodeJS基本都集成了npm),至于nodeJS的安装可以 点这里,这这篇文章就不做详细介绍,安装完后打开命令管理器(nodeJS安装完后的终端)输入:. 在grunt中安装全局命令接口;. 然后说说JSON,确切的说应该是package.json,它主要用于安装grunt依赖的插件,和nodeJS的pakeage.json一样,在执行npm install时,它就会作为主入口,npm通过这JSON中的devDependencies去安装这些插件,具体的关于package大家可以 点击这里看看.

Spring MVC 与 web开发

- - 码蜂笔记
项目组用了 Spring MVC 进行开发,觉得对里面的使用方式不是很满意,就想,如果是我来搭建开发环境,我会怎么做. 下面就是我的想法,只关注于 MVC 的 View 层. 现在基本上都是用 ajax 来调用后台接口,拿到 json格式的数据再展示,有的人直接返回数据,却没有考虑异常的情况,我觉得返回的报文里必须包含表示可能的异常信息的数据和业务响应数据. 我定义了下面这个类来表示报文格式:. /** * 统一的 HTTP 响应格式. <br/> * code 为 "ok" 表示业务调用成功,否则是失败的错误码,如果有多个则以逗号分隔. <br/> * data 是业务数据,如果失败了则是 null.

NodeJS与Mysql的交互

- - CSDN博客推荐文章
把Mysql Module装到 NodeJS中.   JS脚本 mysqlTest.js. //加载mysql Module  .   //要创建的数据库名  .     //要创建的表名  . 作者:qxs965266509 发表于2013-8-17 9:47:35 原文链接. 阅读:0 评论:0 查看评论.

Web开发者必备:Web应用检查清单

- - ITeye博客
想做一个高质量的Web应用,前前后后要做的事情非常多. 国外开发者 Ata Sasmaz 为 Web 开发者制作分享了一份检查清单,包括应用开发、性能、安全、分析、可用性、可靠性、转换策略、竞争策略这些方面需要注意的事项. 清单内容可能不全面,欢迎大家在评论中补充. JavaScript 允许捕获异常. 这些异常需要通过Ajax请求提交到日志服务,否则很难截获Web环境中的错误. 数据层可分离,也可以与另一个遵从规范的数据层互换. 生产环境所用的项目文件应由部署服务器生成,并在无人工干预的情况下自动完成. 版本控制系统保存代码更改的历史,防止现有代码的丢失. GitHub是这项服务最流行的提供商.