【nodejs】初识 NodeJS(二)
上一节我们构建了一个基础的 http 服务器,我们可以接收 http 请求,但是我们得做点什么吧 – 不同的 http 请求,服务器应该有不同的响应。
路由模块
处理不同的 http 请求在我们的代码中是一个不同的部分,叫做路由选择。
我们要为路由提供请求的 url 和其他需要的 get 及 post 参数,随后路由根据这些数据来执行相应的代码,因此,我们需要查看 http 请求,从中提取出请求的 url 以及 get/post 参数。
我们需要的所有数据都会包含在 request 对象中,该对象作为回调函数(onRequest)的第一个参数传递。想要解析 request 对象中的数据就需要调用 url 模块或者 querystring 模块,该两个模块都是 nodejs 的内置模块。
var http = require('http');
var url = require('url');
function start() {
function onRequest(request, response) {
console.log(url.parse(request.url).pathname);
response.writeHead({
'Content-type': 'text/plain'
});
response.write('Hello node.js');
response.end();
}
http.createServer(onRequest).listen(8888);
console.log('server start...');
}
exports.start = start;
在浏览器中输入 http://localhost:8888/start 通过终端我们可以看到请求的 url 路径,通过 url 路径为基准映射到不同的处理程序上。现在我们可以来写路由模块(route.js)了。
function route(pathname) {
console.log('route: ' + pathname);
}
exports.route = route;
有了路由模块,那么我们把路由和服务器整合起来,首先扩展 server.js:
var http = require('http');
var url = require('url');
function start(route) {
function onRequest(request, response) {
var pathname = url.parse(request.url).pathname;
route(pathname);
response.writeHead({
'Content-type': 'text/plain'
});
response.write('Hello node.js');
response.end();
}
http.createServer(onRequest).listen(8888);
console.log('server start...');
}
exports.start = start;
扩展 index.js
var server = require('./server');
var route = require('./route');
server.start(route.route);
在终端开启服务器 node index,可以看到终端输出的内容正是路由模块里面的内容,说明我们的 http 服务器已经在使用路由模块了,并会将请求的路径传递给路由:
node index
server start...
route: /start
route: /favicon.ico
【nodejs】初识 NodeJS(二)的更多相关文章
- 在阿里云 ECS 搭建 nginx https nodejs 环境(二、https)
在阿里云 ECS 搭建 nginx https nodejs 环境(二) 这次主要内容是 如何在 ubuntu 的nginx 下配置 二级域名. 一. 域名解析 首先你需要去到你的 域名服务商那边 进 ...
- 前端笔记之NodeJS(一)初识NodeJS&内置模块&特点
一.NodeJS简介 NodeJS是开发服务器后台的东西,和PHP.JavaEE.python类似,和传统的浏览器的关注DOM的JS完全不同,将JavaScript触角伸到了服务器端.内核是Chrom ...
- 初识JavaScript(二)
初识JavaScript(二) 我从上一篇<初识JavaScript(一)>知道和认识JavaScript的词法结构,也开始慢慢接触到了JavaScript的使用方法,是必须按照JavaS ...
- 初识NodeJS,一个基于GoogleV8引擎的Javascript运行环境
思考 首先我们来思考一个问题:我们都知道几乎所有现代主流浏览器都全面支持了ECMAScript 5.1版标准,而JavaScript的标准是ECMAScript.那么我们就容易认为JavaScript ...
- Nodejs学习笔记(一)——初识Nodejs
前言:目前工作的分内之事相对较为单一,希望可以通过工作之余的时间给自己充充电,只是没有一个学伴或大神带,只能说是摸索着前进.起初准备好好研究下Spring这个框架,下载了源码,结合书籍准备一探究竟,看 ...
- java程序员的NodeJS初识篇
摘要 作为一个一直用java来写后端的程序员用NodeJS来写后台,实在不是很爽.这里记下这两个月的NodeJS学习所遇之坑,与java转NodeJS的同仁共勉.学习时间不长,若有理解错误,望指正. ...
- nodejs 动态创建二维码
<!--弹出二维码--> <div class="qrcode"> <div> <p id="saoma">扫描 ...
- NodeJs学习一NodeJs初识
一.前言 按照惯例,先扯淡,就因为这货,现在才有了各大公司招聘的全栈工程师,正是因为它,让以前只会写前端的人也能写起后端服务器代码来了.所以呢,你招一个会NodeJs的前端,它都能把后端干了,一个人干 ...
- nodejs学习(二) ---- express中使用模板引擎jade
系列教程,上一节教程 express+nodejs快速创建一个项目 在创建一个项目后,views目录下的文件后缀为 .jade . 打开 index.jade,具体内容如下图(忽略 header.j ...
随机推荐
- Java并发程序设计(一) 基础概念
Java并发程序设计(一) 基础概念 一.必须知道的几个概念 一)同步(Synchronous)和异步(Asynchronous) 同步:同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后 ...
- python基础一 ------字符串的多种分隔符分隔
#-*-coding:utf-8-*-''' 字符串的切割 当需要的分隔符是一个是: s.split("分隔符") 当分隔符是多个时: s = "abcd,1 ...
- 获取Android设备WIFI的MAC地址 “MAC地址”
需要指出的是:wifi状态和wifi AP状态是互斥的状态:也就是一旦发现WIFI AP打开,WIFI是不能被打开的. 获取Android设备的WIFI MAC地址,首先需要将设备中的WIFI个人热点 ...
- java的类和对象
创建狗狗类: /** * 狗狗类 * @author Administrator * */ public class Dog { String name="无名氏"; //姓名 i ...
- node 将本地项目docker化
vi test.sh docker rm -f kao3 || echo kao3 not exists;docker run -itd \--privileged=true \-v ~/logs:/ ...
- CY7C68013 USB接口相机开发记录 - 第二天:驱动修改
上次写了资料的下载,并对资料进行了分类,分完类看起来就比较清晰.同时通过强大的百度,也可以得到不少资料. 这里对比较关键的几个文件进行罗列: 一.驱动相关 cyusb.inf: 修改CYUSB.INF ...
- Making the Grade [POJ3666] [DP]
题意: 给定一个序列,以最小代价将其变成单调不增或单调不减序列,代价为Σabs(i变化后-i变化前),序列长度<=2000,单个数字<=1e9 输入:(第一行表示序列长度,之后一行一个表示 ...
- 反编译安卓apk以及jar包
https://www.jianshu.com/p/c9b553cf2b51 https://blog.csdn.net/bzlj2912009596/article/details/78268896
- java解决手机上传竖拍照片旋转90\180\270度问题
<dependency> <groupId>com.drewnoakes</groupId> <artifactId>metadata-extracto ...
- VBV Rate Control
Part 1 <06/05/07 12:08pm> Manao | he is negating a float by printing it, adding a "-" ...