最近学习的 Node.js 之 http
利用 http 模块开始写简单的web服务。
模块:
const http=require('http');
const fs=require('fs');
const path=require('path');
function startServer() {
let onRequest=function (req,res) {
console.log('recived a request.');
res.writeHead(200,{'Content-Type':'text/html'});
let wwwdir= path.resolve(__dirname,'../www');
// console.log(wwwdir);
let readStream = fs.createReadStream(wwwdir+'/bbb.html');
readStream.pipe(res);
};
let server=http.createServer(onRequest);
server.listen(80,'192.168.1.101');
};
exports.startServer = startServer;
调用者,APP,使用两行就开启了一个简单的web服务。
let server=require('./mod_server');
server.startServer();
单文件版路由,响应了几个不同的页面:
const http = require('http');
const fs = require('fs');
const path = require('path');
let wwwdir = path.resolve(__dirname, '../www');
let onRequest = function (req, res) {
console.log('recived a request. ' + req.url);
if (req.url === '/' || req.url === '/home') {
res.writeHead(200, {'Content-Type': 'text/html;charset=UTF-8'});
let readStream = fs.createReadStream(wwwdir + '/index.html');
readStream.pipe(res);
} else if (req.url === '/about') {
res.writeHead(200, {'Content-Type': 'text/html;charset=UTF-8'});
let readStream = fs.createReadStream(wwwdir + '/about.html');
readStream.pipe(res);
} else if (req.url === '/api') {
res.writeHead(200, {'Content-Type': 'application/json'});
let jsonObj = {
name: "alex",
email: 'abc@gg.com',
age: 32
};
// console.log(JSON.parse(jsonStr)); // 反序列化
res.end(JSON.stringify(jsonObj));
} else {
res.writeHead(404, {'Content-Type': "text/html;charset=utf8"});
res.write('抱歉 404 ,你要的页面没找到.');
}
;
};
let server = http.createServer(onRequest);
server.listen(8001, 'localhost');
分开为独立文件的 web server
一、server.js
const http = require('http');
function startServer(route, handle) {
let onRequest = function (request, response) {
console.log('Request received ' + request.url);
// 传递到 route 函数
route(handle, request.url, response);
};
let server = http.createServer(onRequest);
server.listen(, '127.0.0.1');
console.log('Server started on 127.0.0.1:8001');
}
module.exports.startServer = startServer;
二、router.js
const fs = require('fs');
const path = require('path');
let wwwdir = path.resolve(__dirname, '../www');
function route(handle, pathname, response) {
console.log('Routing a request for ' + pathname);
// 判断 handle中是否有对应的 pathname 函数
if (typeof handle[pathname] === 'function') {
handle[pathname](response); // response作为参数传递到 handle 函数
} else {
response.writeHead(, {'Content-Type': 'text/html'});
fs.createReadStream(wwwdir + '/404.html', 'utf8').pipe(response);
}
}
module.exports.route = route;
三、handler.js
const fs = require('fs');
const path = require('path');
let wwwdir = path.resolve(__dirname, '../www');
function home(response) {
response.writeHead(, {'Content-Type': 'text/html'});
fs.createReadStream(wwwdir + '/index.html', 'utf8').pipe(response);
}
function review(response) {
response.writeHead(, {'Content-Type': 'text/html'});
fs.createReadStream(wwwdir + '/about.html', 'utf8').pipe(response);
}
function api_records(response) {
response.writeHead(, {'Content-Type': 'application/json'});
let jsonObj = {
name: "Alex",
passwd: "",
email: 'aaa@cc.com',
age:
};
response.end(JSON.stringify(jsonObj));
}
module.exports = {
home: home,
review: review,
api: api_records
};
四、app.js 主程序,模块方式调用前面的三个文件即可
const server = require('./server');
const router = require('./router');
const handler = require('./handler');
let handle = {};
handle["/"] = handler.home;
handle['/home'] = handler.home;
handle['/review'] = handler.review;
handle['/api'] = handler.api;
server.startServer(router.route, handle);
最近学习的 Node.js 之 http的更多相关文章
- Docker学习之——Node.js+MongoDB+Nginx环境搭建(一)
最近在学习Node.js相关知识,在环境搭建上耗费了不少功夫,故此把这个过程写下来同大家分享一下,今天我先来介绍一下Docker,有很多人都写过相关知识,还有一些教程,在此我只想写一下,我的学习过程中 ...
- 方便大家学习的Node.js教程(一):理解Node.js
理解Node.js 为了理解Node.js是如何工作的,首先你需要理解一些使得Javascript适用于服务器端开发的关键特性.Javascript是一门简单而又灵活的语言,这种灵活性让它能够经受住时 ...
- 学习笔记——node.js
node.js的作用在于,号称可以让服务器支持更多的连接.比如说,php + apche可以让服务器支持4000个并发连接,那么node.js + apche可以让服务器支持并发几万个. 为什么这么牛 ...
- Node.js学习(Node.js基础)
1.开发环境搭建 v8引擎是作为解析JavaScript程序来运行的 nodejs是一个高性能的,第一个体现在他的JavaScript解析速度很快,v8引擎性能很高,第二个事件驱动和非阻塞 2.全局对 ...
- Node.js学习笔记——Node.js开发Web后台服务
一.简介 Node.js 是一个基于Google Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效.Node.j ...
- 让我们一起学习《Node.js入门》一书吧!
Node.js入门 读完本书之后,你将完成一个完整的web应用,该应用允许用户浏览页面以及上传文件. 里面对一些知识的讲解,让你略窥Node.js的门径.最好一段代码一段代码的写下来,我的习惯是手里拿 ...
- 最近学习的 Node.js 基础:安装、环境配置、forever
最近工作中,因为某某某某原因,需要用到Node.js . 发现在很多方面和python很像,比如generator / yield ,比如模块的使用方式,比如http模块. 先安装个环境,windo ...
- 从零开始学习渗透Node.js应用程序
本文来源于i春秋学院,未经允许严禁转载 0x01 介绍 简单的说 Node.js 就是运行在服务端的 JavaScript.Node.js 是一个基于Chrome JavaScript 运行时建立的一 ...
- vue学习之node.js
Node.js是一个Javascript运行环境(runtime environment),发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进行了封装.本文详细介绍了No ...
- nodejs学习笔记Node.js 调试命令
3.4 调试 47 下面是一个简单的例子: $ node debug debug.js < debugger listening on port 5858 connecting ...
随机推荐
- 用python算圆周率及进度条提示
(一)圆周率 : (1)圆周率是指平面上圆的周长与直径之比 (ratio of the circumference of a circle to the diameter) .用符号π表示.中国古代有 ...
- js 格式化带时区的日期
/** * 格式化带时区的日期 */ function formatDate(date) { var arr = date.split("T"); var d = arr[0]; ...
- MemSQL Start[c]UP 2.0 - Round 1E. Three strings
题意:给3个字符串,问从1到min(l1,l2,l3)的长度的子串,找到从该位置长度为l,三个子串相同的三元组的个数 题解:把3个子串用分隔符串起来.然后分开统计每个节点在三个串中出现次数.最后乘起来 ...
- 《SSO CAS单点系列》之 APP原生应用如何访问CAS认证中心
4.开发支持APP登录的移动服务端接口.接收APP登录请求,采用HttpClient转发至CAS认证中心登录,返回json数据解析并最终返回给客户端.本地会话采用redis维护,登录成功,返回acce ...
- 5、继承(extends)
继承主要目的是提高代码的复用性,但是只有在类与类之间有所属关系的时候才能继承,不能为了获取其他类的功能而继承,Java中只有单继承,不支持多继承,但可以多层继承 当父类中定义了相同的功能,内容不同时, ...
- INTRODUCE OF REPRESENTATIVE CPG-CONTROLLED ROBOTS
仿生机器人研究是非常有意思的领域,它不仅从自然界中获取灵感,它也为一些生物的研究提供一个手段和基础,正如下图中所展示的.不论人工智能发展的如何迅速,机械结构始终做为着一个承载的平台,其重要性不可忽略. ...
- java Comparable and Comparator
1.Comparable简介 此接口对实现它的每个类的对象强加一个总排序.这种排序被称为类的自然排序,类的compareTo方法被称为其自然比较方法.可以通过 Collections.sort(和Ar ...
- 移动端input输入placeholder垂直不居中
在移动端编写input输入框时候,为了输入文字与输入框垂直居中,一般情况下,会将input的line-height的高度等于height.但在移动端输入的时候会发现,虽然输入内容确实是垂直居中了,但是 ...
- js生成二维码 qrcode
js生成二维码 QRcode npm 地址 1.安装qrcode //在项目文件夹中执行: npm install --save qrcode //或者,将其全局安装以使用qrcode命令行来保存qr ...
- sprigcloud Eureka Server环境搭建
1.搭建springcloud的Erueka组件,现在搭建这些套件已经变的很方便了,进入https://start.spring.io/页面,如下图: 2.选择好Eureka Server,点击Gen ...