Node.js实现WEB 服务开发

来源:互联网 发布:高级java工程师招聘 编辑:程序博客网 时间:2024/06/09 23:21
<br/>看到<a href=“http://simple-is-better.com/news/tag/simple-todo”>simple todo的各种python版本实现</a>, 我也来凑凑热闹…<br/>既然已经有这么多python版本了, 我就对比实现了一个Simple-TODO的nodejs版本: <a href=“https://github.com/fengmk2/todo”>Node TODO</a>, 模版和樣式全部copy自web.py版本.<br/><h2>Source Code && Demo</h2><br/><ul><br/> <li>源代码: <a href=“https://github.com/fengmk2/todo”></a><a href=“https://github.com/fengmk2/todo”>https://github.com/fengmk2/todo</a></li><br/> <li>在线demo: <a href=“http://api.yongwo.de:3888/”></a><a href=“http://api.yongwo.de:3888”>http://api.yongwo.de:3888</a></li><br/></ul><br/><img src=“http://ww3.sinaimg.cn/large/6cfc7910jw1diwdadumcwj.jpg” alt=“http://ww3.sinaimg.cn/large/6cfc7910jw1diwdadumcwj.jpg” /><br/><h2>代码目录</h2><br/>目录还是很清晰的, public存放静态文件, views存放模版, controllers处理业务逻辑,<br/>还有配置config.js, web主入口server.js<br/><br/><img src=“http://ww1.sinaimg.cn/large/6cfc7910jw1dix4wp92nmj.jpg” alt=“代码目录” /><br/><h2>使用到的第三方nodejs模块</h2><br/><ul><br/> <li><a href=“http://expressjs.com/”>express</a>: Web框架, 目前nodejs使用最广泛的web框架</li><br/> <li><a href=“https://github.com/visionmedia/ejs”>ejs</a>: 模版渲染引擎, 用于生成动态内容</li><br/> <li><a href=“https://github.com/felixge/node-mysql”>node-mysql</a>: 纯javascript实现的mysql驱动, 无法安装任何mysql包依赖.</li><br/></ul><br/>这3个模块都可以直接通过<a href=“http://npmjs.org/”>npm</a>安装获得:<br/><pre escaped=“true”><pre><code>$ npm install express ejs mysql<br/></pre></code></pre><br/><h2>开发过程记录</h2><br/><h3><a href=“https://github.com/fengmk2/todo/blob/master/config.js”>config.js</a></h3><br/>可配置的信息:<br/>* 网站名称<br/>* 监听端口号, 默认8080<br/>* 数据库配置信息<br/><h3>如何访问数据库</h3><br/>在<a href=“https://github.com/fengmk2/todo/blob/master/config.js”>config.js</a>文件里面, 会使用一下方式保持着数据库的链接对象<br/><pre escaped=“true”><pre><code>var db = exports.db = new require(‘mysql’).Client(db_options);<br/>db.connect(function(err) {<br/> if(err) {<br/> console.error('connect db ’ + db.host + ’ error: ’ + err);<br/> process.exit();<br/> }<br/>});<br/></pre></code></pre><br/>这样我们就可以在别的地方直接使用db对象了<br/><h3><a href=“https://github.com/fengmk2/todo/blob/master/server.js”>server.js</a></h3><br/>express可以帮我们默认实现了静态文件处理, cookie处理, 请求参数处理等事情, 只需要配置一下, 就可以使用上这些功能了.<br/><pre escaped=“true”><pre><code>var app = express.createServer();<br/>app.use(express.static(__dirname + ‘/public’, {maxAge: 3600000 * 24 * 30}));<br/>app.use(express.cookieParser());<br/>app.use(express.bodyParser());<br/></pre></code></pre><br/>同样, 需要配置模版渲染引擎为ejs<br/><pre escaped=“true”><pre><code>app.set(“view engine”, “html”);<br/>app.set(“views”, _dirname + ‘/views’);<br/>app.register(“html”, ejs);<br/></pre></code></pre><br/>看看views/index.html里面的一个最复杂的模版例子,<br/>ejs最让我喜欢的是不用再学一套语法, 直接是内嵌js, 还是很容易读懂的<br/><br/><img src=“http://ww1.sinaimg.cn/large/6cfc7910jw1dix6f9kailj.jpg” alt=“http://ww1.sinaimg.cn/large/6cfc7910jw1dix6f9kailj.jpg” /><br/><h3>URL Routing与Controllers</h3><br/>一个http请求过来, 由那个controller处理, express提供了简便的routing方式<br/><pre escaped=“true”><pre><code>app.get(’/’, todo.index);<br/>app.post(’/todo/new’, todo.new);<br/>app.get(’/todo/:id’, todo.view);<br/>app.get(’/todo/:id/edit’, todo.edit);<br/>app.post(’/todo/:id/edit’, todo.save);<br/>app.get(’/todo/:id/delete’, todo.delete);<br/>app.get(’/todo/:id/finish’, todo.finish);<br/></pre></code></pre><br/>如添加一条todo记录: HTTP GET /new, 将由<a href=“https://github.com/fengmk2/todo/blob/master/controllers/todo.js”>todo.new</a>方法处理,<br/>代码逻辑包括了title参数有效性验证, 数据保存到数据库, http redirect:<br/><pre escaped=“true”><pre><code>exports.new = function(req, res, next) {<br/> var title = req.body.title || ‘’;<br/> title = title.trim();<br/> if(!title) {<br/> return res.render(‘error’, {message: ‘标题是必须的’});<br/> }<br/> db.query(‘insert into todo set title=?, post_date=now()’, [title], function(err, result) {<br/> if(err) return next(err);<br/> res.redirect(’/’);<br/> });<br/>};<br/></pre></code></pre><br/>更多的controller处理逻辑请查看<a href=“https://github.com/fengmk2/todo/blob/master/controllers/todo.js”>/controllers/todo.js</a>.<br/><h3>数据库初始化及启动Web进程</h3><br/><pre escaped=“true”><pre><code>$ mysql xxx<br/>$ source ~/todo/todo.sql<br/>$ node server.js<br/></pre></code></pre><br/><h3>有爱</h3><br/>可以看到, 无论是python的web开发, 还是nodejs, 我们以前对web的概念还是无需改变的.<br/>都是我们熟悉的一些关键词:<br/>http, request, response, html, template engine, url routing, MVC, GET, POST, MYSQL, Database…<br/><br/>不同的是, 这里只使用javascript就可以驱动着以上的一切.<br/><br/>希望本文对你有用 ^^
原创粉丝点击