文档章节

JS服务端系列-初级认识http和fs模块

透笔度
 透笔度
发布于 2015/12/11 17:26
字数 1496
阅读 103
收藏 3
点赞 0
评论 0

提示1:根据系统的实际情况,下载nodejs http://nodejs.cn/download/ 然后如同软件一样安装。

提示2:一份参考手册 http://nodejs.cn/api/synopsis.html 。

提示3:看准下载的nodejs版本,注意手册是否一致。

 

一、node第一步,hello纸尿裤

我们可以开始学习nodejs了,从手册给出的案例我们做服务器的创建和“helloworld”的显示。

在nodejs的目录下创建一个文件夹,创建一个sever.js,拷贝参考手册的代码:

var http = require('http');
http.createServer(function (request, response) {
    response.writeHead(200, {'Content-Type': 'text/plain'});
    response.end('Hello World\n');
}).listen(8124);

在cmd窗口,切换到存放sever.js的文件夹,执行命令:

node sever.js

在浏览器输入地址:http://localhost:8124/ 我们在浏览器就看见“hello world”了,到这里web服务器创建和显示内容就完成了。

=====个人理解:

1.请求到http这个东西

2.这个http东西可以调用创建服务器的方法

3.在创建方法里有回调方法,回调会接受req和res参数

4.res参数看意思是一个对象,可以调用写头部信息的方法,200的话结合ajax是回复状态成功,下面参数定义类型是text文本

5.res还可以调用end方法,这个结束方法的参数就是回复给用户的信息

6.创建服务器方法也应该是返回一个对象,对象有listen方法,看意思是监听方法,监听是8124,我们这里似乎不知道是什么,看见手册提示输入的地址,也就顿悟就是端口,一般默认的是8080,我们这里是8124。

结合我们前端js就算个人解读了,下面是真实要了解和知道的东西?

1.http到底是什么,请求方法require怎么用?????

2.req,res这回调里面的参数,有什么用,怎么实现前后交互?????

 

二、“http”模块的req和res初步认识

打开http介绍的手册页面 http://nodejs.cn/api/http.html

经过从上到下的阅读,我们总结出下面的代码:

var http = require('http');
var sever=http.createServer(function (request, response) {
    var regurl=request.url;
    response.writeHead(200, {'Content-Type': 'text/html;charset=UTF-8'});
    response.write(regurl);
    response.end("获取用户请求地址!");
});
sever.listen(8124);

我们现在已经知道http是node为我们提供的web模块,调用方法可以创建服务器,并且在回调的req会携带客户的信息,res可以返回给用户信息。

用户->req->服务器->res->用户

我们代码获取到了用户的url地址,然后在应答时显示到用户界面,同样在应答时设置文档为html类型,编码为utf-8,这个设置必须在end之前,不然会失效。

现在我们设想我们的真是网站环境:

1.用户打开网站根目录“/”会看到首页面,这个页面我们假设放了一个a标签,用户点击a会连接到另一个页面,如登录页面。

代码编辑如下:

var http = require('http');
var sever=http.createServer(function (request, response) {
    var regurl=request.url;
    if(regurl=="/"){
        response.writeHead(200, {'Content-Type': 'text/html;charset=UTF-8'});
        response.write('<a href="login">点击进入登录页面</a>');
        response.end("<div>欢迎访问</div>");
    }else if(regurl="/login"){
        response.writeHead(200, {'Content-Type': 'text/html;charset=UTF-8'});
        response.write('<p>用户名:<input type="text"><br/>密码:<input type="password"><br/><br/><input type="submit" value="登录"></p>');
        response.end();
    };
});
sever.listen(8124);

ctrl+c终止,然后node sever.js,我们刷新查看页面,根目录下显示:

点击链接根据我们处理,login显示如下:

 

好像有点意思了,是不是?

不过我们发现一个非常严重的问题,我们显示的应该是一个html页面的内容,这里面的显示我们是以字符串形式编辑的,如果输出完整页面会非常的麻烦,我们如果能把html代码放在html文件,在这里面读进来,然后在显示在客户端,就显得整齐多了。

 

二“util”模块,常用工具的使用

我们上面知道了req对象,知道req.headers属性里以json的形式存放了用户的所有信息,我们如何把这些打印出来呢?

我们请求util模块,看下面代码:

var http = require('http');
var util = require('util');
var sever=http.createServer(function (request, response) {
    var regurl=request.url;
    if(regurl=="/"){
        response.writeHead(200, {'Content-Type': 'text/html;charset=UTF-8'});
        response.write(util.inspect(request.headers));
        response.end("<div>欢迎访问</div>");
    }else if(regurl="/login"){
        response.writeHead(200, {'Content-Type': 'text/html;charset=UTF-8'});
        response.write('<p>用户名:<input type="text"><br/>密码:<input type="password"><br/><br/><input type="submit" value="登录"></p>');
        response.end();
    };
});
sever.listen(8124);

这样我们就看到整个json格式的信息了,这个工具方法还是非常有用的

除了这种处理,工具模块还有大量类型判断方法,就不列举了,参考js的typeof和instanceof对类型的判断

还有就是util.inherts()如何实现继承,我们在js里通过call,apply和方法的prototype属性也可以实现继承

 

三、“fs”模块的文件打开读取

打开手册“fs”地址 http://nodejs.cn/api/fs.html

新建index.html,代码如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<a href="login">点击进入登录页面</a>
<div>欢迎访问</div>
</body>
</html>

新建login.html,代码如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<p>用户名:<input type="text"><br/>密码:<input type="password"><br/><br/><input type="submit" value="登录"></p>
</body>
</html>

我们根据页面手册,使用fs的 readFile方法

sever.js编辑后如下:

var http = require('http');
var fs = require('fs');
var sever=http.createServer(function (request, response) {
    var regurl=request.url;
    if(regurl=="/"){
        response.writeHead(200, {'Content-Type': 'text/html;charset=UTF-8'});
        fs.readFile('index.html', 'utf8', function (err, data) {
            if (err) throw err;
            response.write(data);
            response.end("");
        });
    }else if(regurl="/login"){
        response.writeHead(200, {'Content-Type': 'text/html;charset=UTF-8'});
        fs.readFile('login.html', 'utf8', function (err, data) {
            if (err) throw err;
            response.write(data);
            response.end("");
        });
    };
});
sever.listen(8124);

我们一定要注意书写嵌套,这个方法是异步处理,如果我们把res.end(),放在读取外面是错误的,会导致没有读取完提前结束。

重新运行后,预览。

© 著作权归作者所有

共有 人打赏支持
透笔度
粉丝 65
博文 124
码字总数 235452
作品 0
朝阳
前端工程师
NODE高级编程阅读笔记系列(一)

本篇涉及以下主题 node简单介绍 事件驱动编程 模块化 缓冲区处理 Node简单介绍 直接用官方的那句话: Node.js 是一种建立在Google Chrome's V8 引擎上的non-blocking(非阻塞),event-driven(...

可爱的圣诞老人 ⋅ 05/23 ⋅ 0

浅谈Node中module的实现原理

曾几何时,Javascript还没那么牛逼,几乎所有人都觉得它是用来做网页特效的脚本而已。彼时仓促创建出来的javascript的自身缺点被各种吐槽。随着web的发展,Javascript如今是媳妇熬成婆,应用...

xuerensusu ⋅ 05/21 ⋅ 0

weex eros框架源码解析

weex eros是基于alibaba weex框架进行二次封装的客户端跨平台开发框架,主要是为前端开发者(可以不用熟悉客户端开发)提供的一站式客户端app开发解决方案。官网地址为:https://bmfe.github...

雅爸学技术 ⋅ 05/27 ⋅ 0

来,哥教你提升逼格——EventLoop

开门见山,提升逼格从EventLoop开始!!! 毋庸置疑,大家都很了解js是一门单线程语言,这也就说明JS无法进行多线程,但是JS中异步的功能完全可以模拟多线程,而且效果还杠杠滴。当然,如果想...

小浪哥 ⋅ 05/25 ⋅ 0

使用javascript一样可以做在线算法编程

基于node的readline一样可以使用标准流的输入输出 对于大学生在刚开始学习c ,c++, java的时候,写着hello word的代码,然后在命令框中输入输出; 基于很多算法的学习,在我短浅的认识中,身边...

Cc卿 ⋅ 05/25 ⋅ 0

nodejs开发——express框架学习

在我们实际开发项目时,总是会用一些框架,而不是自己从头开始开发。而在nodejs中,express框架就是一个使用频率最高的一个框架。本篇主要来讲解express的使用。 加载express框架 snippetid=...

chenyufeng1991 ⋅ 2017/01/31 ⋅ 0

JavaScript 工作原理之六-WebAssembly 对比 JavaScript 及其使用场景

原文请查阅这里,略有改动,本文采用知识共享署名 4.0 国际许可协议共享,BY Troland。 本系列持续更新中,Github 地址请查阅这里。 这是 JavaScript 工作原理的第六章。 现在,我们将会剖析...

tristan ⋅ 05/15 ⋅ 0

React Native SDK for OSS

此文主要介绍 React Native SDK for OSS的方方面面,包括相关基本概念、项目背景、项目方案、环境搭建运行、使用姿势、注意事项等。文末的附件可运行Example Zip压缩包和针对新手的入门实用文...

zuozhao ⋅ 05/18 ⋅ 0

在浏览器中使用javascript module(译)

在浏览器中使用JS module 简介 现在,所有主流浏览器都已经支持JS module(Chrome、Edge、Safari、Firefox)~这篇文章将为你讲解如何在浏览器中使用JS module,如何负责的部署它们,以及chr...

LitCigar ⋅ 06/21 ⋅ 0

Node.js历险记之剑未配好,已出江湖

打开微信扫一扫,关注微信公众号【数据与算法联盟】 转载请注明出处: http://blog.csdn.net/gamergyt/ 博主微博: http://weibo.com/234654758 Github: https://github.com/thinkgamer ht...

thinkgamer.cn ⋅ 2017/03/05 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

前台对中文编码,后台解码

前台:encodeURI(sbzt) 后台:String param = URLDecoder.decode(sbzt,"UTF-8");

west_coast ⋅ 昨天 ⋅ 0

VS2015配置并运行汇编(一步一步照图做)【vs2017的链接在最后】

前言 我是上学期学的汇编,因为有vs又不想用课上教的麻烦的dosbox以及masm32,但是一直没找到高亮插件和能调试的(难在运行不了而找不到答案上,出现的错误在最后放出,还请先达们不吝指点)...

simpower ⋅ 昨天 ⋅ 0

一起读书《深入浅出nodejs》-node模块机制

node 模块机制 前言 说到node,就不免得提到JavaScript。JavaScript自诞生以来,经历了工具类库、组件库、前端框架、前端应用的变迁。通过无数开发人员的努力,JavaScript不断被类聚和抽象,...

小草先森 ⋅ 昨天 ⋅ 0

Java桌球小游戏

其实算不上一个游戏,就是两张图片,不停的重画,改变ball图片的位置。一个左右直线碰撞的,一个有角度碰撞的。 左右直线碰撞 package com.bjsxt.test;import javax.swing.*;import j...

森林之下 ⋅ 昨天 ⋅ 0

你真的明白RPC 吗?一起来探究 RPC 的实质

你真的明白RPC 吗?一起来探究 RPC 的实质 不论你是科班出身还是半路转行,这么优秀的你一定上过小学语文,那么对扩句和缩句你一定不陌生。缩句就是去除各种修饰提炼出一句话的核心,而不失基...

AI9o後 ⋅ 昨天 ⋅ 0

z-index设置失效?

今天碰到了一个问题,就是在给li设置提示框的时候,有用到遮罩效果,本来想把对应的出现在最顶层,可是不管将li设置的z-index值设为多大,li都没有出现在遮罩层之上。 我在网上查了z-index设...

IrisHunag ⋅ 昨天 ⋅ 0

CyclicBarrier、CountDownLatch以及Semaphore使用及其原理分析

CyclicBarrier、CountDownLatch以及Semaphore是Java并发包中几个常用的并发组件,这几个组件特点是功能相识很容易混淆。首先我们分别介绍这几个组件的功能然后再通过实例分析和源码分析其中设...

申文波 ⋅ 昨天 ⋅ 0

Java对象的序列化与反序列化

Java对象的序列化与反序列化

Cobbage ⋅ 昨天 ⋅ 0

Sqoop

1.Sqoop: 《=》 SQL to Hadoop 背景 1)场景:数据在RDBMS中,我们如何使用Hive或者Hadoop来进行数据分析呢? 1) RDBMS ==> Hadoop(广义) 2) Hadoop ==> RDBMS 2)原来可以通过MapReduce I...

GordonNemo ⋅ 昨天 ⋅ 0

全量构建和增量构建的区别

1.全量构建每次更新时都需要更新整个数据集,增量构建只对需要更新的时间范围进行更新,所以计算量会较小。 2.全量构建查询时不需要合并不同Segment,增量构建查询时需要合并不同Segment的结...

无精疯 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部