`
Josh_Persistence
  • 浏览: 1653597 次
  • 性别: 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能知道帮助。初学

相关推荐

    巧用<UL>标签实现树

    通常,我们可以通过CSS隐藏二级及以下层级的`&lt;ul&gt;`,然后用JavaScript监听点击事件,动态改变元素的显示状态。 例如,我们可以为`&lt;li&gt;`添加一个类(如`tree-node`),并设置CSS样式: ```css .tree-node ul { ...

    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

    从零学习node.js之搭建http服务器(二).docx

    虽然这个例子非常简单,但它为我们提供了Node.js执行JavaScript代码的基本概念。 #### 三、搭建HTTP服务器 接下来,我们将进一步构建一个能够响应HTTP请求的服务器。在Node.js中,可以通过内置的`http`模块来实现...

    html_js_css精解

    此外,还可以使用前端框架(如Bootstrap)和后端技术(如Node.js)来进一步提升网站的功能性和性能。 以上内容概括了从HTML、CSS到JavaScript的核心知识点,为初学者提供了全面的指导。无论是对于想要入门Web开发的...

    JS解析XML

    如果你的项目中使用了JQuery,那么可以利用它的`$.parseXML()`函数来简化XML解析: ```javascript let xmlString = '&lt;goods&gt;&lt;name&gt;商品1&lt;/name&gt;&lt;price&gt;199&lt;/price&gt;&lt;/goods&gt;'; let xmlDoc = $.parseXML(xmlString); ...

    jsdom(英文版 chm)

    &lt;p&gt;这是一个关于DOM的例子。&lt;/p&gt; &lt;/body&gt; &lt;/html&gt; ``` 在DOM中,`&lt;html&gt;`、`&lt;head&gt;`、`&lt;title&gt;`、`&lt;body&gt;`、`&lt;h1&gt;`和`&lt;p&gt;`都是元素节点,而“DOM示例”和“欢迎来到DOM的世界!”则是文本节点。 **JS操作DOM** ...

    freemarker总结

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

    Javascript: SQL <==> Java String 互转

    例如,在 Node.js 的 `mysql` 库中: ```javascript let query = connection.query('INSERT INTO users (name) VALUES (?)', [name]); ``` 这里的问号 `?` 是一个占位符,`[name]` 参数将被安全地插入到查询中。 ...

    使用audio标签播放mp3,amr,wav文件

    例如,可以使用JavaScript库如`MediaElement.js`或者服务端语言如Node.js配合`ffmpeg`工具将AMR转换为MP3或WAV格式,以确保大多数浏览器都能播放。 五、额外的音频控制 除了基本的播放、暂停和音量控制,`&lt;audio&gt;`...

    node_form.zip

    在Node.js环境中,开发Web服务器并处理HTML表单(`&lt;form&gt;`标签)提交的数据是一项常见的任务。"node_form.zip"包含的项目就是一个简单的实例,展示了如何实现这一功能。在这个项目中,我们有三个主要文件:`index....

    node-htmlparser.zip

    &lt;p id="greeting"&gt;Welcome to Node.js!&lt;/p&gt; &lt;/body&gt; &lt;/html&gt; `; parseHTML(inputHTML); ``` 在这个例子中,我们创建了一个新的Parser实例,并定义了`onopentag`事件处理器。每当解析器遇到一个开放标签时,它就会...

    使用ajax实现异步提交的例子

    &lt;label for="province"&gt;省份:&lt;/label&gt; &lt;select id="province" onchange="loadCities(this.value)"&gt;&lt;/select&gt; &lt;label for="city"&gt;城市:&lt;/label&gt; &lt;select id="city"&gt;&lt;/select&gt; &lt;/body&gt; &lt;/html&gt; ``` 接下来,我们...

    Breakdance是一个node.js库用于将HTML转成markdown

    Node.js是一款基于Chrome V8引擎的JavaScript运行环境,允许开发者在服务器端运行JavaScript代码。`Breakdance`利用了Node.js的异步非阻塞I/O模型,可以在处理大量数据时保持高效性能。在Node.js环境中,你可以通过...

    Java XML转JSON

    String xml = "&lt;root&gt;&lt;item&gt;&lt;name&gt;Item1&lt;/name&gt;&lt;price&gt;10.99&lt;/price&gt;&lt;/item&gt;&lt;/root&gt;"; ObjectMapper xmlMapper = new XmlMapper(); JsonNode jsonNode = xmlMapper.readTree(xml); ObjectMapper jsonMapper = ...

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

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

    例子:实现最新版本Node.js中Express+mongodb的登录注册页面

    通过这个例子,我们了解了如何利用Node.js、Express和MongoDB构建Web应用的基本步骤。这个基础可以扩展到更复杂的项目,包括用户认证、API接口、数据检索和更多。继续学习和实践,你将在Web开发领域更加熟练。

    计算机系统漫游 CSAPP - Hello World!的一生的html和无水印图片

    通过深入学习,我们可以掌握更复杂的交互,如CSS(层叠样式表)用于美化页面,JavaScript用于增加动态功能,以及服务器端语言(如PHP、Python或Node.js)来生成动态内容。对于CSAPP(Computer Systems: A Programmer...

    简单创建易用的web表单

    &lt;label for="email"&gt;邮箱:&lt;/label&gt; &lt;input type="email" id="email" name="email" required&gt; &lt;label for="message"&gt;留言:&lt;/label&gt; &lt;textarea id="message" name="message"&gt;&lt;/textarea&gt; &lt;button type=...

    Javascript解析服务器端XML文件

    以下是一个基本的示例,展示了如何使用JavaScript加载XML文件并进行解析: ```javascript var xhr = new XMLHttpRequest(); xhr.open('GET', 'server_side_menu.xml', true); xhr.onreadystatechange = function() ...

    node.js爬虫例子

    在这个"node.js爬虫例子"中,我们看到作者使用了Node.js这一流行的JavaScript运行环境来编写爬虫程序。Node.js因其非阻塞I/O模型和事件驱动的特点,非常适合处理大量并发的网络请求,因此在爬虫开发中被广泛应用。 ...

Global site tag (gtag.js) - Google Analytics