39 Serve different file types with our server

  • 处理文件类型
function content_type(filename) {
var ext = path.extname(filename).toLowerCase();
switch(ext) {
case '.jpg': case '.jpeg':
return 'image/jpeg';
case '.gif':
return 'image/gif';
case '.png':
return 'image/png';
case '.css':
return 'text/css';
case '.js':
return 'text/javascript';
case '.html':
return 'text/html';
default:
return 'text/plain';
}
}
  • 返回时数据类型的判断
//如果不是直接使用pipe处理数据流的话

if(content_type(fn).substr(0, 6) === 'image/') {
res.write(data);
} else {
res.write(data.toString('utf8');
}
  • 使用curl下载
curl -o filename.type http://localhost:3000         //下载传输过来的文件

53 Support POST data, cookies, and sessions

  • curl传输表单数据
curl -X -POST -F(--form) email=example.gmail  -F 'username=jinks peng'  localhost:3000;
  • express cookie简单操作
//设置
res.cookie(name, value [, options]) //清除
res.clearCookie(name [, options])
  • express文件的简便操作
//下载文件
res.download(path [, filename] [, fn]) //发送文件
res.sendFile(path [, options] [, fn])

55 Implement HTTP basic authentication

  • curl登陆验证
curl -u username=xxx  localhost:3000;

72 Deploy Node apps Basic

  • 简单的重启node和输出log
//example.js

setInterval(function () {
console.log('Request');
if(Math.random() < 0.33) {
throw new Error('boo');
}
}, 2000) //输出log node example.js | tee -a example.log; //-a表示继续添加,没有则会覆盖 //使用shell while true; do node example.js | tee -a example.log ; done

73 Deploy Node apps Ninja Unix like

  • 获取运行程序的pid
//通过运行命令查找
node example.js
pgrep -n -f 'node example.js' //-f 表示运行的命令 npm start
pgrep -n -f 'nodemon -w 'common/' -w 'server/' -e js,json server/server.js' //注意要是其实际的运行命令 //通过程序类别查找
ps ax | grep node //aux能显示更多信息
  • 根据pid查询程序内存使用等信息
//
ps wux pid //获取部分信息
ps wux pid | awk 'NR>1' | awk '{print 6}' //|第二行开始|选择第6列

75 Fully take advantage of multi processor servers on deployment

  • 运行多个nodejs服务
//server.js
var http = require('http'); http.createServer(function (req, res) {
res.end('listeing on :' + process.argv[2]);
}).listen(process.argv[2]); //命令
node server.js 8001 & //会返回pid
node server.js 8002 &
node server.js 8003 &
jobs //返回所有正在运行的node程序pid
var http = require('http');
var httpProxy = require('http-proxy'); var proxy1 = httpProxy.createProxyServer({target:'http://localhost:8080'}).listen(8000);
var proxy2 = httpProxy.createProxyServer({target:'http://localhost:8080'}).listen(8001);
var proxy3 = httpProxy.createProxyServer({target:'http://localhost:8080'}).listen(8002);
var proxy4 = httpProxy.createProxyServer({target:'http://localhost:8080'}).listen(8003); proxy1.on('proxyReq', function (proxyReq, req, res) {
console.log('proxy1');
}); proxy2.on('proxyReq', function (proxyReq, req, res) {
console.log('proxy2');
}); proxy3.on('proxyReq', function (proxyReq, req, res) {
console.log('proxy3');
}); proxy4.on('proxyReq', function (proxyReq, req, res) {
console.log('proxy4');
}); http.createServer(function (req, res) {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.write('request successfully proxied!' + '\n' + JSON.stringify(req.headers, true, 2));
res.end();
}).listen(8080);

76 Support sessions on multiple servers with memcached

  • 在利用nodejs多进程的时候,为确保数据一致(如session),可以使用memcachedmemcached

77 Implement virtual hosting Express

  • 使用express设置虚拟主机
//
var express = require('express');
var master_app = express();
var vhost = require('vhost'); var one = express();
one.get('*', function (req, res) {
res.end('one');
}); var two = express();
two.get('*', function (req, res) {
res.end('two');
}); var three = express();
three.get('*', function (req, res) {
res.end('three');
}); master_app.use(vhost('one', one));
master_app.use(vhost('two', two));
master_app.use(vhost('three', three)); master_app.get('*', function (req, res) {
res.end('main');
}); master_app.listen(8080); //访问
curl localhost:8080
curl -H 'Host: one' localhost:8080
curl -H 'Host: two' localhost:8080
curl -H 'Host: three' localhost:8080
  • 修改host名称
sudo vim /etc/hosts

//添加
127.0.0.1 one //访问
curl one:8080 //直接访问host: one的主机

nodejs review-03的更多相关文章

  1. nodejs复习03

    文件系统fs 重命名 fs.rename() fs.renameSync 优先选择异步,可以进行异常判断 打开关闭文件 fd = fs.openSync(file, flags) fs.closeSy ...

  2. nodeJs学习-03 GET数据请求,js拆解/querystring/url

    原生JS解析参数: const http = require('http'); http.createServer(function(req,res){ var GET = {}; //接收数据容器 ...

  3. nodejs+websocket制作聊天室视频教程

    本套教程主要讲解了node平台的安装,node初级知识.node 服务器端程序响应http请求,通过npm安装第三方包,websocket即时通讯.聊天页面界面制作.拖动原理.拖动效果.遮罩效果.定位 ...

  4. [Java 教程 03] 我的第一个Java程序

    现在,大家应该都已经安装好jdk环境了吧!是不是已经跃跃欲试,按耐不住心中的小激动了?那我们现在就来写我们java学习生涯中的第一个java程序. 文件相关设置 为了方便后面大家的学习呢?有一点大家还 ...

  5. 【NodeJS 学习笔记03】先运行起来再说

    前言 最近同事推荐了一个不错的网址:https://github.com/nswbmw/N-blog/wiki/_pages 里面的教程很是详细,我们现在跟着他的节奏学习下NodeJS,一个简单的博客 ...

  6. nodejs随记03

    文件操作 文件系统的操作 fs.readFile(filename, [options], callback) fs.writeFile(filename, data, [options], call ...

  7. Nodejs in Visual Studio Code 03.学习Express

    1.开始 下载源码:https://github.com/sayar/NodeMVA Express组件:npm install express -g(全局安装) 2.ExpressRest 打开目录 ...

  8. Angular4+NodeJs+MySQL 入门-03 后台接口定义

    这篇里是如何定义接口,我们一般访问接口如:post请求调用http://127.0.0.1:11000/webapi/userinfo/user 这个接口,成功返回用户信息,如果失败要返回失败原因等. ...

  9. [Intel Edison开发板] 04、Edison开发基于nodejs和redis的服务器搭建

    一.前言 intel-iot-examples-datastore 是Intel提供用于所有Edison开发板联网存储DEMO所需要的服务器工程.该工程是基于nodejs和redis写成的一个简单的工 ...

  10. nodeJs 5.0.0 安装配置与nodeJs入门例子学习

    新手学习笔记,高手请自动略过 安装可以先看这篇:http://blog.csdn.net/bushizhuanjia/article/details/7915017 1.首先到官网去下载exe,或者m ...

随机推荐

  1. java并发编程实战(java concurrency in practice)

    第一章   线程共享进程范围内的资源,但每个线程都有各自的程序计数器.栈以及局部变量等. 多个线程可以同时调度到多个CPU上运行.   线程的优势? 在服务应用程序中,可以提升资源利用率以及系统吞吐率 ...

  2. JavaScript中的正则表达式(终结篇)

    JavaScript中的正则表达式(终结篇) 在之前的几篇文章中,我们了解了正则表达式的基本语法,但那些语法不是针对于某一个特定语言的.这篇博文我们将通过下面几个部分来了解正则表达式在JavaScri ...

  3. Linux系统下压缩文件时过滤指定的文件 |Linux系统压缩指定文件代码

    进入要压缩的目录: [root@iZ25c748tjqZ wechat]# cd /alidata1/htdocs/wechat/ 查看目录: [root@iZ25c748tjqZ wechat]# ...

  4. 安卓贴图源码--->单点触控.多点触控.类似in/百度魔图

    效果如图: 类似in,百度魔图,的贴图功能  核心的地方:单/多点 旋转缩放后记录各个顶点小图标位置 引用这里 http://blog.csdn.net/xiaanming/article/detai ...

  5. 最终解决 mouseenter, mouseleave , mouseout mousehover mousemove等事件的区别?

    在jquery中, html页面的div的显示和隐藏, 修改等的功能, 最终都要由 事件 触发来引用, 不管是键盘事件, 还是鼠标事件... mouseenter和mouseleave是成对对应的, ...

  6. NEERC2014 Eastern subregional

    \ 先把furthur的超碉线段树粘过来 //#pragma comment(linker, "/STACK:102400000,102400000") #include<c ...

  7. linux 根据文件大小查找文件

    inux下的find命令用来查找文件,通过man find就知道它是无所不能的.所以按照文件大小来查找文件就不在话下.从man find搜索size,可以看到如下信息: -size n[cwbkMG] ...

  8. Javascript实现图片预加载【回调函数,多张图片】

    使用JS实现一组图片动画效果或者使用HTML5 Canvas渲染一系列图片等案例中,需要图片全部加载完成方可运行动画效果.此时程序中就会涉及多张图片预加载代码.当接二连三的案例中都涉及图片预加载时,就 ...

  9. Java Native Interface 二 JNI中对Java基本类型和引用类型的处理

    本文是<The Java Native Interface Programmer's Guide and Specification>读书笔记 Java编程里会使用到两种类型:基本类型(如 ...

  10. angular-ui-bootstrap-modal必须要说的几个点(转)

    angular-ui-bootstrap-modal必须要说的几个点 摘要: 基于angular来实现的一个bootstrap模态框,有些不得不说的地方 项目中以前就经常用到模态框,但是一直没有时间来 ...