`
Josh_Persistence
  • 浏览: 1637351 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

Node JS: < 二> Node JS例子解析

阅读更多

目前,Node.js是在前端页面开发中十分受欢迎的,它是一套用来编写高性能网络服务器的JavaScript工具包,在之前的博客中介绍了Node JS 的基础知识:http://josh-persistence.iteye.com/admin/blogs/1897203,本文主要通过一个实际的案例进行解读。要求本文的阅读对象为有一定Javascript和其他开发语言基础的读者。

 

Hello World例子

  我们依然来实现大家都十分熟悉的hello world例子,我们尝试在控制台打印hello world的字样,首先编写hello.js文件,然后编写如下代码:

  console.log(‘Hello World’);

  然后我们在命令行下,在hello.js文件所在的文件夹中,执行如下命令:

  node hello.js

  这个时候就可以看到‘Hello World’的输出。

  建立一个HTTP 服务器

  下面, 我们尝试编写一个简单的http 服务器,只不过功能十分简单而已,代码如下:

// 引入http模块
var http = require("http");
// 调用createServer方法创建http web服务器
// request参数代表所有发送到服务端的请求
// response 参数代表服务端向浏览器端发送的所有内容
http.createServer(function (request, response) {
// request的监听事件,当有请求发送到服务端时触发
request.on("end", function () {
// 向客户端浏览器写入HTTP的头部信息
response.writeHead(200, {
'Content-Type': 'text/plain'
});
// 返回给浏览器端数据
response.end('Hello HTTP!');
});
// 在8080端口监听
}).listen(8080);

  上面的注释已经写的很清楚了,理解也容易,将这个文件保存为http.js然

  后同样在命令下执行:

  node http.js

  并且通过浏览器访问:http://localhost:8080,就会在页面中看到Hello HTTP的输出。

  处理URL参数

  现在我们来看下如何处理url参数,代码如下:

var http = require("http"),
// 必须引入url模块处理url参数
url = require("url");
http.createServer(function (request, response) {
request.on('end', function () {
var _get = url.parse(request.url, true).query;
response.writeHead(200, {
'Content-Type': 'text/plain'
});
response.end('Here is your data: ' + _get['data']);
});
// Listen on the 8080 port.
}).listen(8080);

   在上面的代码中,首先引入了url的模块,这个模块用来处理url传递的参数,并且用变量var _get获得传入的完整URL,通过url.parse方法,将url的参数转变为对象,然后通过_get[‘data’]获得传入的URL参数,将上面 的代码保存为get.js,命令行下运行

  nodejs get.js

  并在浏览器中输入如下地址:

  http://localhost:8080/?data=hello

  则会在浏览器中发现输出:Here is your data:hello

  对文件的读写

  对于文件的读写,同样要引入fs这个核心模块,读和写文件分别使用的是fs.readFile()和fs.writeFile()方法,代码例子如下:

var http = require("http"),
fs = require("fs");
request.on("end", function () {
//读文件
fs.readFile("test.txt", 'utf-8', function (error, data) {
response.writeHead(200, {
'Content-Type': 'text/plain'
});

data = parseInt(data) + 1;
//将data变量写到test.txt中去
fs.writeFile('test.txt', data);
// 显示该网页更新了多少次
response.end('This page was refreshed ' + data + ' times!');
});
});
}).listen(8080)

  将上面的代码保存为file.js,在运行前,先创建一个test.txt文件,并且同样保存在跟file.js同一个目录中。

   上面的代码中演示了fs.readFile()和fs.writeFile()两个方法,每次当服务器收到客户的请求后,将从test.txt文件中读 取数据,并且加1,然后又同样更新这个test.txt文件,其中fs.readFile()接受三个参数,一个是需要读取的文件名,一个是编码格式,最 后是回调处理方法。而WriteFile()则很简单这里是两个参数,一个是写入的目的文件名称,另外是需要写入的数据。

  现在在命令行下运行上面的代码

  node file.js

   打开浏览器,运行http://localhost:8080,并且进行刷新,会发现好像出现了错误喔,因为数字增加了2,而不是1,但其实这个不是错 误,因为第一次的连接是浏览器自动发起的,每次访问这个地址,都是实际上是两个请求发送到服务端,让我们在代码中修正下:

var http = require("http"),
fs = require("fs");
http.createServer(function (request, response) {
request.on('end', function () {
if (request.url == '/') {

fs.readFile('test.txt', 'utf-8', function (error, data) {
response.writeHead(200, {
'Content-Type': 'text/plain'
});
data = parseInt(data) + 1;
fs.writeFile('test.txt', data);
response.end('This page was refreshed ' + data + ' times!');
});
} else {
// 指示文件不存在
response.writeHead(404);
response.end();
}
});
}).listen(8080);

  如何访问数据库

  接下来我们简单看下node.js如何连接数据库。首先为了访问比如mysql这样的数据库,必须安装类哭node-mysql,本文中选择的是mysql@2.0.0-alpha2的版本,直接在控制台执行:

  npm install mysql@2.0.0-alpha2

  就可以安装成功了,接下来看下有关的访问代码:

var http = require('http'),
//增加mysql类库
mysql = require("mysql");
// 创建mysql连接,设置用户名,密码,连接数据库名
var connection = mysql.createConnection({
user: "root",
password: "",
database: "db_name"
});
http.createServer(function (request, response) {
request.on('end', function () {
// 查询数据表
connection.query('SELECT * FROM your_table;', function (error, rows, fields) {
response.writeHead(200, {
'Content-Type': 'x-application/json'
});
// 数据以json形式返回
response.end(JSON.stringify(rows));
});
});
}).listen(8080);

   使用这个类库去连接数据库是十分容易的,在上面的代码中,只是简单设置了查询,而在实际的应用中,可能还需要加上检查各类异常的代码。并且注意要设置返 回的Content-type为x-application/json格式,并且使用JSON.stringify()方法去将数据转为json格式。

  最后,将文件保存为mysql.js,并且执行node mysql.js,在浏览器中输入

  http://localhost:8080,则会可以在浏览器中可以看到返回的json数据。

  小结

  本文简单介绍了Node.js的概念和基本知识,让读者对node.js有一个大概的初步认识,事实上,node.js还在不断发展之中,也有一些对node.js进行进一步封装的框架,比如

  expressjs(地址:http://expressjs.com/),作为前端和后端开发者都建议对nodejs进行学习。

0
1
分享到:
评论
3 楼 acm79 2013-10-14  
我想问问博主,我想在服务端处理客户端发送来的json数据,然后再返回给客户端。不知道服务端的nodejs代码该怎么写
2 楼 acm79 2013-10-14  
javatozhang 写道
lz我已经按照你上面的例子运行代码,运行helloworld没问题,可是运行到http监听都出现一直等待未响应,我是在Window平台上运行的。>node http.js 后光标就向下一行了并且控制台(CMD)就不能够操作了,打开浏览器http://localhost:8080 等待很久也没反应,希望lz能知道帮助。初学

你这个应该是8080端口被其他服务占用了
1 楼 javatozhang 2013-07-02  
lz我已经按照你上面的例子运行代码,运行helloworld没问题,可是运行到http监听都出现一直等待未响应,我是在Window平台上运行的。>node http.js 后光标就向下一行了并且控制台(CMD)就不能够操作了,打开浏览器http://localhost:8080 等待很久也没反应,希望lz能知道帮助。初学

相关推荐

    node-pg-query-native:适用于Node.js的PostgreSQL查询解析器

    参数范围类型描述query 细绳SQL查询以以下格式返回对象: { query: &lt;query&gt;, error: { message: &lt;message&gt;, fileName: &lt;fileName&gt;, lineNumber: &lt;line&gt;, cursorPosition: &lt;cursor&gt; }例子 var parse

    freemarker总结

    其它的运行符可以作用于数字和日期,但不能作用于字符串,大部分的时候,使用gt等字母运算符代替&gt;会有更好的效果,因为 FreeMarker会把&gt;解释成FTL标签的结束字符,当然,也可以使用括号来避免这种情况,如:&lt;#if (x&gt;y)&gt; ...

    markdown-attr:允许在编写 Markdown 时添加 HTML 属性的简单解析器

    降价属性 如果想要在 Markdown 中包含一些更具体的样式,则很有用。 传入已转换为 HTML 的 Markdown 字符串并运行此解析器。 一个例子是将图像向右浮动... Node.js 的用法: var markdown_attr = requires ( 'markdo

    html-dom-parser:HTML到DOM解析器

    html-dom-parser 在服务器(Node.js)和客户端(浏览器)上均可使用HTML到DOM解析器: HTMLDOMParser(string[, options])解析器将HTML字符串转换为描述DOM树JavaScript对象。例子const parse = require ( '...

    小号:使用CSS选择器解析和转换流式HTML

    喇叭 的维护版本例子更换内部输入HTML &lt; table&gt; &lt; tbody&gt; blah blah blah &lt;/ tbody&gt; &lt; tr&gt; &lt; td&gt; there &lt;/ td&gt; &lt;/ tr&gt; &lt; tr&gt; &lt; td&gt; it &lt;/ td&gt; &lt;/ tr&gt; &lt; tr&gt; &lt; td&gt; is &lt;/ td&gt; &lt;/ tr&gt;&lt;/ table&gt;代码const trumpet = ...

    template.js:一个JavaScript模板引擎,简单,易用及其他功能,支持webpack,汇总,包裹,browserify,fis和gulp

    一款javascript模板引擎,简单,好用,支持webpack,汇总,包裹,browserify,fis和gulp特性JS原生语法,模版解析,编译,渲染支持所有浏览器及Node,支持TypeScript预编译支持主流打包工具自定义配置,修饰符,函数...

    expression-parser:Node.js和浏览器的表达式解析器和评估器

    这个库是一个很小的表达解析器,是Node.js和浏览器的评估器。 它最初是从Angular.js表达式解析器中提取的,因此它支持Angular过滤器表达式,例如: name|replace:"Mr":"Mrs" 特征 算术和逻辑运算符 三元运算符 ...

    《Node即学即用》 Node, Up and Running 原版

    你一定想快速掌握Node.js,学习如何用JavaScript开发服务器程序。有了这本指南,你就能学会用Node构建高度可扩展的服务器程序,理解它的事件循环架构如何降低开发的复杂度并且保证服务器编程的安全与便捷。 本书是...

    markdown:Node.js Markdown到HTML解析器

    Node.js Markdown到HTML解析器 此Markdown-to-HTML解析器使用自定义的,轻量级的Markdown语法。 它允许创建:斜体,粗体,删除线和上标文本,标题,链接,图像,视频,音频,内联代码,多行代码,无序列表,有序...

    node-stl:使用Node.js解析stl文件并获取体积和重量

    节点 使用Node.js解析STL文件,并获取体积,重量,边界框和质心。例子 const NodeStl = require ( "node-stl" ) ;var stl = NodeStl ( __dirname + '/myCool.stl' , { density : 1.04 } ) ;console . log ( stl . ...

    cheerio-repl:用于与实时 Cheerio DOM 交互的 Node JS REPL

    用于与实时 DOM 交互的 Node JS REPL。 安装 npm install -g cheerio-repl 用法 cheerio &lt;URL&gt; shell 中可用的全局对象: $ =cheerio 解析的 DOM 对象res = 从 URL 返回的原始响应对象 例子 在命令提示符下运行...

    DWR.xml配置文件说明书(含源码)

    默认的时候DWR将java void值转换成javascript的null值就是这样设置&lt;convert converter="null" match="void"/&gt;. 有时java.lang.Void也需要进行这样的转换,所以设置也是相似的&lt;convert converter="null" match="java....

    configion:CLI工具可帮助您轻松设置配置文件

    configion prep &lt;app&gt; &lt;package&gt; 例子 configion prep test com.test.testing 建于 使用的框架。 -使用Node js制作CLI的有用库。 XML解析为JS / JSON,反之亦然。 作者 Omir Gibreel 最后 请为我们的回购做贡献 ...

    node-alpine:Alpine-Node.js的Apache日志解析器

    #高山alpine是Apache mod_log日志文件的解析器。 它支持三种最常见的日志格式(“通用日志格式”...例子使用自定义日志格式从字符串解析最简单的(如果不是所有有用的话)用例是var Alpine = require ( 'alpine' ) ;va

    ale_parser.js:用纯 JavaScript 编写的 Avid 日志交换 (ALE) 解析器,用于浏览器或 Node.js

    用纯 JavaScript 编写的 Avid 日志交换 (ALE) 解析器,用于浏览器或 Node.js 例子 在 Node.js 中 这是读取文件并输出从解析器检索到的 JSON 数据的 JavaScript 示例 var ale ; fs . readFile &#40; "logexchange....

    basic-nodeJS:第一个node.js练习

    formidable - 解析post中的file资料mongodb - 实作mongo资料库的CRUD server and route 练习server.js处理好GET/POST的资料-有file的POST直接将request传至loginback.js解析route.js处理分配local文件的问题资料库...

    Node.js学习之查询字符串解析querystring详解

    查询字符串模块提供了解析和格式化工具URL查询字符串的API,本文将详细介绍关于Node.js查询字符串解析querystring的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 一、querystring....

    metar.js:用于METAR天气报告的Javascript解析器

    适用于Javascript的 (气象航空报告)解析器 演示: : 安装 node.js或browserify npm install metar 浏览器 &lt; script src =" metar.js " &gt; &lt;/ script &gt; 例子 从获取报告 // only required in node...

    ical.js:javascript的ical

    ical.js (以前是节点的) javascript / node( )的容忍的,最小的icalendar解析器安装-Node.js ical.js在npm上可用: npm install ical原料药ical.parseICS(str) 用ICS文件解析字符串var data = ical.parseFile&#...

    详解Node.js中path模块的resolve()和join()方法的区别

    关于Node.js中path模块的resolve()和join()方法的比较,对照着总结看例子差不多以后在写模块的时候思路就能很清晰了 resolve 作用:path.resolve() 该方法将一些的 路径/路径段 解析为绝对路径。 语法:path.resolve...

Global site tag (gtag.js) - Google Analytics