express-1 从Node开始
hello world###
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World');
}).listen(3000);
console.log('Server begin');
事件驱动编程###
Node的核心理念时事件驱动编程,即了解有哪些事件以及如何响应这些事件;前面例子中,HTTP请求就是要处理的事件,http.createServer方法将函数作为一个参数,描述如何响应这个事件
路由###
指向客户端提供它说发出的请求内容的机制;对基于web的客户端/服务端编程而言,就是客户端在URL中指明它想要的内容,具体来说就是路径和查询字符串
修改前面的例子
var http = require('http');
http.createServer(function (req, res) {
var path = req.url.replace(/\?(?:\?.*)?$/, '').toLowerCase();
console.log(path);
switch(path) {
case '/':
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Homepage');
break;
case '/about':
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('About');
break;
default:
res.writeHead(404, { 'Content-Type': 'text/plain' });
res.end('Not Found');
break;
}
}).listen(3000);
静态资源服务###
静态资源:HTML和图片等这些内容不会变化的资源;用Node提供静态资源只适用于初期的小型项目,对于比较大的项目,你应该会想用Nginx或CDN之类的代理服务器来提供静态资源
使用Apache或IIS,只是创建一个HTML文件,访问它,然后让它自动发送到客户端。使用Node则必须打开文件,读取其中的内容,然后将这些内容发送给浏览器。
var http = require('http');
var fs = require('fs');
function serverStaticFile(res, path, contentType, responseCode) {
var responseCode = responseCode || 200;
fs.readFile(__dirname +'/' + path, function(err, data) {
console.log(err);
if(err) {
res.writeHead(500, {'Content-Type': 'text/plain'});
res.end('500 - Internal Error');
} else {
res.writeHead(responseCode, {'Content-Type': contentType});
res.end(data);
}
});
}
http.createServer(function (req, res) {
var path = req.url.replace(/\?(?:\?.*)?$/, '').toLowerCase();
switch(path) {
case '/':
serverStaticFile(res, 'public/home.html', 'text/html');
break;
case '/about':
serverStaticFile(res, 'public/about.html', 'text/html');
break;
case '/logo.jpg':
console.log(0);
serverStaticFile(res, 'public/logo.jpg', 'image/jpg');
break;
default:
serverStaticFile(res, 'public/404.html', 'text/html', 404);
break;
}
}).listen(3000);
console.log('Server start');
fs.readFile是读取文件的异步方法。这个函数有同步版本,fs.readFileSync。它调用fs.readFile读取指定文件中的内容,fs.readFile读取完文件后执行回调函数,如果文件不存在,或者读取文件时遇到许可权限方面的问题,会设定err变量,并且会返回一个HTTP 500的状态码表明服务器错误。如果文件读取成功,文件会带着特定的响应码和内容类型发给客户端。
__dirname会被解析为正在执行的脚本所在的目录。
express-1 从Node开始的更多相关文章
- 使用express+multer实现node中的图片上传
使用express+multer实现node中的图片上传 在前端中,我们使用ajax来异步上传图片,使用file-input来上传图片,使用formdata对象来处理图片数据,post到服务器中 在n ...
- 基于 Express 搭建一个node项目 - 起步
一,如何基于 Express 搭建一个node项目 什么是Express 借用官方的介绍,Express是一个基于Node.js平台的极简.灵活的web应用开发框架,它提供了一系列强大的特性,帮助你创 ...
- 新建一个express工程,node app无反应
1.问题描述 新建一个express工程,node app以后无反应,浏览器输入localhost:3000,显示如下 2.解决方法 在app.js文件中加入如下代码 app.listen(3000, ...
- Express 4.x Node.js的Web框架
为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/SJQ. http://www.cnblogs.com/shijiaqi1066/p/3821150.html ...
- Express 4.x Node.js的Web框架----《转载》
本文使用node.js v0.10.28 + express 4.2.0 1 Express概述 Express 是一个简洁而灵活的node.js的MVC Web应用框架,提供一系列强大特性创建各种W ...
- windows系统下,express构建的node项目中,如何用debug控制调试日志
debug是一款控制日志输出的库,可以在开发调试环境下打开日志输出,生产环境下关闭日志输出.这样比console.log方便多了,console.log只有注释掉才能不输出. debug库还可以根据d ...
- express脚手架重建node项目
安装express 和express-generator cnpm install express express-generator -g express demo1 创建demo1项目, 进入项目 ...
- Node.js Express 路由文件分类
前言 基于上一篇Web Api Controller分类,在MVC中我们通常要按自己的业务来划分Controller层, 好处多多,那么Express框架作为Node.js的一款MVC框架,那么自然也 ...
- Node 进阶:express 默认日志组件 morgan 从入门使用到源码剖析
本文摘录自个人总结<Nodejs学习笔记>,更多章节及更新,请访问 github主页地址.欢迎加群交流,群号 197339705. 章节概览 morgan是express默认的日志中间件, ...
- node.js入门及express.js框架
node.js介绍 javascript原本只是用来处理前端,Node使得javascript编写服务端程序成为可能.于是前端开发者也可以借此轻松进入后端开发领域.Node是基于Google的V8引擎 ...
随机推荐
- java课后作业 弹出窗口求两个数的加减乘除
//计算2个数的加减乘除 谷伟华 2015/10/6package jisuan; import javax.swing.JOptionPane; public class Jiasuan { pub ...
- Android错误:Re-installation failed due to different application signatures
Re-installation failed due to different application signatures (2013-04-20 14:27:32) 转载▼ 标签: 解决方法 问题 ...
- Mac 下查看 Android Studio 的 SHA1的方法
cmd -> ->cd .android ->keytool -v -list -keystore debug.keystore 默认口令:android ************* ...
- Java Web基础——Action+Service +Dao三层的功能划分
1. Action/Service/DAO简介: Action是管理业务(Service)调度和管理跳转的. Service是管理具体的功能的. Action只负责管理,而Service负责实施. D ...
- Android Attr -- Understanding Android Custom Attributes
原文:http://androidbook.com/item/4169
- Redis处理文件日志并发(2)
多线程操作同一个文件时会出现并发问题.解决的一个办法就是给文件加锁(lock),但是这样的话,一个线程操作文件时,其它的都得等待,这样的话性能非常差.另外一个解决方案,就是先将数据放在队列中,然后开启 ...
- sdut 487-3279【哈希查找,sscanf ,map】
487-3279 Time Limit: 2000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 题目链接: sdut: http://acm.sdut.ed ...
- <jsp:include>和<%@include file=""%>区别【131031】
<jsp:include page=""> 父页面和包含进来的页面单独编译,单独翻译成servlet后,在前台拼成一个HTML页面. <%@include fil ...
- python检测文件的MD5值
python检测文件的MD5值MD5(单向散列算法)的全称是Message-Digest Algorithm 5(信息-摘要算法),经MD2.MD3和MD4发展而来.MD5算法的使用不需要支付任何版权 ...
- 学习ASP.NET缓存机制
缓存是大型BS架构网站的性能优化通用手段,之前知道有这个概念,并且也知道很重要,但是一直没静下心来了解.这次借着学习PetShop源码的机会熟悉一下ASP.NET基本的缓存机制(生产环境中的真实缓存有 ...