nodeJs初探

2014年09月21日

第一个node程序

今天写了第一个node程序。用node读取文本文件并输出。

var fs = require('fs'); //require用来加载模块(fs为系统模块)
fs.readFile('file.txt', 'utf8', function(err, data) {
	if (err) {
		return console.log(err);
	} 
	console.log(data);
});

执行的时候直接即可

node xx.js				

私用属性,公有属性和公有方法

同级ji目录下新建一个a.js文件。

var name = "xiaoqianqian"; //私有属性
this.sex = "girl"; //公有属性
this.showMsg = function (text) {
	return text;
} 再来一个b.js文件

var a = require('./a'); 
console.log(a.name); //undefined
console.log(a.sex); //girl
console.log(a.showMsg("12345,上山打老虎~")); //12345,上山打老虎~ 私有方法在模块以外是取不到的,所以是undefined。公有属性和公有方法的声明需要在前面加上this 关键字。

nodeJs流行模块

目前非常流行的一些 npm 模块有:

1.express – Express.js,是一个简洁而灵活的 node.js Web应用框架, 并且已经是现在大多数 Node.js 应用的标准框架。

2.connect – Connect 是一个Node.js的HTTP服务拓展框架,提供一个高性能的“插件”集合,以中间件闻名,是 Express 的基础部分之一。socket.io和sockjs – 目前服务端最流行的两个 websocket 组件。

3.Jade – 流行的模板引擎之一,并且是 Express.js 的默认模板引擎。

4.mongo 和 mongojs – 封装了 MongoDB 的的各种 API。

5.redis – Redis 的客户端函数库。

6.coffee-script – CoffeeScript 编译器,允许开发者使用 Coffee 来编写他们的 Node.js 程序。

7.underscore (lodash, lazy) – 最流行的 JavaScript 工具库。

nodeJs的特点

其特点为:
  1. 它是一个Javascript运行环境
  2. 依赖于Chrome V8引擎进行代码解释
  3. 事件驱动
  4. 非阻塞I/O
  5. 轻量、可伸缩,适于实时数据交互应用
  6. 单进程,单线程

开学

1.step1

//在terminal中运行文件,在浏览器中输入http://127.0.0.1:8080/即可见效
//我们可以在浏览器里看到发送的http请求,状态码是200
//两个点 1.向createServer传递了一个匿名函数 2.createServer.listen()
var http = require('http');
http.createServer(function (request, response) {
	response.writeHead(200, {"content-type": "text/plain"});
	response.write("hello world");
	response.end(); //完成回应
}).listen(8080);


//下面的代码等同于上面的
var http = require("http");
function onRequest(request, response) {
  		response.writeHead(200, {"Content-Type": "text/plain"});
  		response.write("Hello World");
  		response.end();
}

http.createServer(onRequest).listen(8888);

2.step2 模块化

//server.js
var http = require('http');

function start() {
	http.createServer(function (request, response) {
		response.writeHead(200, {"content-type": "text/plain"});
		response.write("hello world");
		response.end();
	}).listen(8080);
}

exports.start = start; //晕死,不自觉的就写成了module.export = start!!!

//index.js
var server = require('./server');
server.start();

3.step3 不同的请求应该有不同的处理

//server.js
var http = require('http');
var url = require('url');

function start() {
	http.createServer(function (request, response) {
		var pathName = url.parse(request.url).pathname;
		console.log("路径:" + pathName); //刷新一次页面终端中输出一次
		response.writeHead(200, {"content-type": "text/plain"});
		response.write("hello world");
		response.end();
	}).listen(8080);
}

exports.start = start;

//将路由拎出来之后(看到这,感觉属性了点,backbone、spm这些有些共同的思想吧)
//server.js
var http = require('http');
var url = require('url');

function start(route) {
	http.createServer(function (request, response) {
		var pathName = url.parse(request.url).pathname;
		route(pathName);
		response.writeHead(200, {"content-type": "text/plain"});
		response.write("hello world");
		response.end();
	}).listen(8080);
}

exports.start = start;


//route.js
function route(pathName) {
	console.log("路径:" + pathName); //注意不是在浏览器端输出的 会有两个输出,一个是/favicon.ico'
}

exports.route = route;

//index.js
var server = require('./server');
var route = require('./route');
server.start(route.route);  //为什么在index.js中require这个路由而不是在server.js中require?怕如果多个文件重复还是上面?

4.step4 加入路由处理程序

//index.js
var server = require('./server');
var route = require('./route');
var requestHandlers = require("./requestHandlers");

var handle = {}
handle["/"] = requestHandlers.start;
handle["/start"] = requestHandlers.start;
handle["/upload"] = requestHandlers.upload;

//将函数当参数传递去处理一件事 需要的是“动作”而不是名词 函数式编程
server.start(route.route, handle);

//route.js
function route(handle, pathname) {
  	if (typeof handle[pathname] === 'function') {
	handle[pathname]();
  	} else {
	console.log("No request handler found for " + pathname);
  	}
}

exports.route = route;

//requestHandlers.js
function start() {
  		console.log("Request handler 'start' was called.");
}

function upload() {
  		console.log("Request handler 'upload' was called.");
}

exports.start = start;
exports.upload = upload;


//server.js
var http = require('http');
var url = require('url');

function start(route, handle) {
	http.createServer(function (request, response) {
    	var pathName = url.parse(request.url).pathname;
    	route(handle, pathName);
    	response.writeHead(200, {"content-type": "text/plain"});
    	response.write("hello world");
   		response.end();
	}).listen(8080);
}

exports.start = start;

  

学习资料

访问 访问 访问