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引擎 ...
随机推荐
- 自定义tld标签,页面使用
背景需求: 系统本身的session不能在页面使用 如下: controller: @RequestMapping(method=RequestMethod.GET) public String ge ...
- C# 总复习
1.循环语句 四要素:初始条件.循环条件.循环体.状态改变 循环的最后一句:循环条件不再满足 2. ++ --int a = 5; //在赋值语句中,后++需要,先进性赋值,然后进行+1运算 ...
- JPA查询语句(转载)
JPQL就是一种查询语言,具有与SQL 相类似的特征,JPQL是完全面向对象的,具备继承.多态和关联等特性,和hibernate HQL很相似. 查询语句的参数 JPQL语句支持两种方式的参数定义 ...
- spring bean中scope="prototype“的作用
今天写代码时,遇到个问题,问题大概如下:在写一个新增模块,当各文本框等输入值后,提交存入数据库,跳到其它页面,当再次进入该新增页面时,上次输入的数据还存在. 经过检查发现是,spring配置文件中,配 ...
- 分模块的maven项目调试时报Source not found的解决办法
一.背景 通常在开发中,我们经常会拆分我们的项目为一个个maven子工程,然后用一个父项目进行集成,并且子项目还会继承自父项目.当我们对这些项目进行debug调试的时候往往会在eclipse中出现so ...
- 二、获取微信用户openId
/// <summary> /// 登录首页 /// </summary> /// <returns></returns> public ActionR ...
- ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(八) 之 用 Redis 实现用户在线离线状态消息处理
前言 上篇的预告好像是“聊天室的小细节,你都注意到了吗?”.今天也是为那篇做铺垫吧.之前的版本有好多问题,比如:当前登录用户是否合法问题,userid参数如果随便传后台没有验证.还有一个致命的问题,用 ...
- NYOJ题目1047欧几里得
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAskAAAIcCAIAAACLpKQmAAAgAElEQVR4nO3dv1LjOsMH4O8m6LkQ6l ...
- iOS 获取当前展示的页面
- (UIViewController *)getCurrentVC { UIViewController *result = nil; UIWindow * window = [[UIApplica ...
- .net学习笔记---xml序列化
XML序列化是将对象的公共属性和字段转换为XML格式,以便存储或传输的过程.反序列化则是从XML输出中重新创建原始状态的对象.XML序列化中最主要的类是XmlSerializer类.它的最重要的方法是 ...