index.html

<html>
<body>
<form action="/api/v1/records" method="post">
name: <input type="text" name="name">
age: <input type="text" name="age" >
<input type="submit" value="submit">
</form>
</body>
</html>

app.js

var server = require('./server');
var router = require('./router'); var handler = require('./handler'); var handle = {};
handle['/'] = handler.home;
handle['/home'] = handler.home;
handle['/review'] = handler.review;
handle['/api/v1/records'] = handler.api_records; server.startServer(router.route,handle);

server.js

var http = require('http');
var fs = require('fs');
var url = require('url');
var querystring = require('querystring'); function startServer (route,handle) {
var onRequest = function(request, response) {
//解析取得?之前的路由
var pathname = url.parse(request.url).pathname;
var data = [];
request.on('error', function (err) {
console.error(err);
}).on('data', function(chunk) {
data.push(chunk);
}).on('end', function() {
if (request.method === 'post') {
//当post的数据过大时,选择主动销毁
if (data.length > 1e6) {
request.connection.destroy();
}
data = Buffer.concat(data).toString();
route(handle, pathname, response, querystring.parse(data));
} else {
//解析取得?之后的路由 true返回一个json
//此方法只能取到get的值,post方法无法取值
var params = url.parse(request.url, true).query;
route(handle, pathname, response, params);
}
}); } var server = http.createServer(onRequest);
server.listen(3000);
} console.log('finished');
module.exports.startServer = startServer;

router.js

var fs = require('fs');

function route(handle, pathname, response, params) {
console.log('Routing a request for' + pathname);
if (typeof handle[pathname] === 'function') {
handle[pathname](response, params);
} else {
response.writeHead(200, {'Content-Type': 'text/html'});
fs.createReadStream(__dirname + '/404.html', 'utf8').pipe(response);
}
} module.exports.route = route;

handler.js

var fs = require('fs');

function home(response) {
response.writeHead(200, { 'Content-Type': 'text/html'});
fs.createReadStream(__dirname + '/index.html', 'utf8').pipe(response);
} function review(response) {
response.writeHead(200, { 'Content-Type': 'text/html'});
fs.createReadStream(__dirname + '/review.html', 'utf8').pipe(response);
} function api_records(response, params) {
response.writeHead(200, { 'Content-Type': 'application/json' });
response.end(JSON.stringify(params));
} module.exports = {
home: home,
review: review,
api_records: api_records
}

nodejs的get与post的更多相关文章

  1. NodeJs之OS

    OS Node.js提供了一些基本的底层操作系统的模块OS. API var os = require('os'); console.log('[arch] 操作系统CPU架构'+os.arch()) ...

  2. NodeJs之Path

    Path模块 NodeJs提供的Path模块,使得我们可以对文件路径进行简单的操作. API var path = require('path'); var path_str = '\\Users\\ ...

  3. NodeJs之调试

    关于调试 当我们只专注于前端的时候,我们习惯性F12,这会给我们带来安全与舒心的感觉. 但是当我们使用NodeJs来开发后台的时候,我想噩梦来了. 但是也别泰国担心,NodeJs的调试是很不方便!这是 ...

  4. NodeJs在Linux下使用的各种问题

    环境:ubuntu16.04 ubuntu中安装NodeJs 通过apt-get命令安装后发现只能使用nodejs,而没有node命令 如果想避免这种情况请看下面连接的这种安装方式: 拓展见:Linu ...

  5. NodeJs之child_process

    一.child_process child_process是NodeJs的重要模块.帮助我们创建多进程任务,更好的利用了计算机的多核性能. 当然也支持线程间的通信. 二.child_process的几 ...

  6. nodejs进阶(6)—连接MySQL数据库

    1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABA ...

  7. 图片访问实时处理的实现(nodejs和php)

    我在访问时光网.网易云音乐等网站时,发现将它们页面中的一些图片URL修改一下就可以得到不同尺寸的图片,于是思考了其实现方案,我的思路是:URL Rewrite + 实时处理 + 缓存,对用户请求的UR ...

  8. nodejs进阶(4)—读取图片到页面

    我们先实现从指定路径读取图片然后输出到页面的功能. 先准备一张图片imgs/dog.jpg. file.js里面继续添加readImg方法,在这里注意读写的时候都需要声明'binary'.(file. ...

  9. nodejs进阶(3)—路由处理

    1. url.parse(url)解析 该方法将一个URL字符串转换成对象并返回. url.parse(urlStr, [parseQueryString], [slashesDenoteHost]) ...

  10. 【原】nodejs全局安装和本地安装的区别

    来微信支付有2年多了,从2年前的互联网模式转变为O2O模式,主要的场景是跟线下的商户去打交道,不像以往的互联网模式,有产品经理提需求,我们帮忙去解决问题. 转型后是这样的,团队成员更多需要去寻找业务的 ...

随机推荐

  1. 树莓派 Raspbian

    备注,从右往左分别是:无线鼠标一个, HDMI转VGA接口一个,网线一根,小米充电宝电源线一个.树莓派Pi 3 一台,包括读卡器一个+32G class10 SD卡一块.最后俩个U盘作为备用里面有Ar ...

  2. shell的算术运算

    变量的数值计算方法大致有双括号 (()), expr,  bc, $[ ] 例子1 注意:2**3表示2的3次方,a++表示先输出a自身的值,然后进行++的运算: --a表示先进行--的运算,然后再输 ...

  3. python 学习(pip工具的安装)

    mac 电脑上使用终端命令 curl https://bootstrap.pypa.io/get-pip.py | python3 基于Python 3 pip --version pip3 list ...

  4. orange

    选型:使用orange系统 orange与kong的比较1.kong整体代码上较凌乱, orange相对较有条理2.kong本身不支持后台管理页面,只能通过api方式增,删,改plugin, oran ...

  5. P3879 [TJOI2010]阅读理解 题解

    P3879 [TJOI2010]阅读理解 题解 题目描述 英语老师留了N篇阅读理解作业,但是每篇英文短文都有很多生词需要查字典,为了节约时间,现在要做个统计,算一算某些生词都在哪几篇短文中出现过. 输 ...

  6. 题目1016:火星A+B(字符串拆分)

    问题来源 http://ac.jobdu.com/problem.php?pid=1016 问题描述 每次输入两个数,不同数位之间用逗号隔开,其中,第n位的进制就是第n个素数,即个位数是2进制的,十位 ...

  7. 在swift工程调用第三方库,Bridging导入头文件提示not found解决办法

    swift语言简洁,上手之后感觉还不错,今天在使用swift调用cocoapods的AFNetworking时候总是提示“'AFNetworking/AFNetworking.h' file not ...

  8. 更改Android编译软件版本(make/gcc/bision)

    一.make版本 1.下载make的压缩包 ftp://ftp.gnu.org/gnu/make/ 2.解压,安装 cd make-x.x ./configuration sh build.sh su ...

  9. 2019.4.3 HTML&CSS 理论部分

    HTML 块标签 1.独占一行,不和其他标签待在一行; 2.能设置宽高 常见的块标签:h1-h6,p,div,table,hr,br,ul,ol, 行标签 1.可以和其他行标签待在一行 2.不能设置宽 ...

  10. jumserver 官方文档和

      一步一步安装(CentOS) 本文档旨在帮助用户了解各组件之间的关系, 生产环境部署建议参考 进阶安装文档 安装过程中遇到问题可参考 安装过程中常见的问题 测试推荐环境 CPU: 64位双核处理器 ...