第一个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;