Node.js

Node是:

         构建在JavaScript之上的,事件触发和异步的;专为数据密集型实时程序设计的。

            组成部分:

                        var http =require('http'); 引入required模块

http.createServer(function(request, response){ 创建服务器

// 发送 HTTP 头部

// HTTP 状态值: 200 : OK

// 内容类型: text/plain

response.writeHead(200,{'Content-Type':'text/plain'});接收请求和响应请求

// 发送响应数据 "Hello World"

response.end('Hello World\n');}).listen(8888);

// 终端打印如下信息

console.log('Server running at http://127.0.0.1:8888/');

EventEmitter 类

定义: events 模块只提供了一个对象: events.EventEmitter。EventEmitter 的核心就是事件触发与事
件监 听器功能的封装。 你可以通过require("events");来访问该模块。
用法:
// 引入 events 模块
var events = require ( 'events' );
// 创建 eventEmitter 对象
var eventEmitter = new events . EventEmitter ();
var event = new EventEmitter ();
event . on ( 'some_event' , function () {
console . log ( 'some_event 事件触发' ); });
setTimeout ( function () {
event . emit ( 'some_event' ); }, 1000 );
EventEmitter 提供了多个属性,如 on 和 emiton 函数用于绑定事件函数,emit 属性用于触发一个事件。
Buffer 类
定义:因为JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。buffer类 用来创建一个专门
存放二进制数据的缓存区。
用法:
var buf = new Buffer ( 10 ); 创建
var buf =newBuffer([10,20,30,40,50]); 创建
var buf = new Buffer ( "www.runoob.com" , "utf-8" ); 创建
buf . write ( string [, offset [, length ]][, encoding ]) 写入缓冲区
buf . toString ([ encoding [, start [, end ]]]) 缓冲区读取
转换:
var json = buf . toJSON ( buf ); buffer对象转换为json对象

Stream(流)

从流中读取数据:
var fs = require("fs");
var data = '';

// 创建可读流
var readerStream = fs.createReadStream('input.txt');

// 设置编码为 utf8。
readerStream.setEncoding('UTF8');

// 处理流事件 --> data, end, and error
readerStream.on('data', function(chunk) {
   data += chunk;
});

readerStream.on('end',function(){
   console.log(data);
});

readerStream.on('error', function(err){
   console.log(err.stack);
});

console.log("程序执行完毕");
写入流:
var fs = require("fs");
var data = '菜鸟教程官网地址:www.runoob.com';

// 创建一个可以写入的流,写入到文件 output.txt 中
var writerStream = fs.createWriteStream('output.txt');

// 使用 utf8 编码写入数据
writerStream.write(data,'UTF8');

// 标记文件末尾
writerStream.end();

// 处理流事件 --> data, end, and error
writerStream.on('finish', function() {
    console.log("写入完成。");
});

writerStream.on('error', function(err){
   console.log(err.stack);
});

console.log("程序执行完毕");
路由:
var http = require("http");
var url = require("url");

function start() {
  function onRequest(request, response) {
    var pathname = url.parse(request.url).pathname;
    console.log("Request for " + pathname + " received.");
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write("Hello World");
    response.end();
  }

  http.createServer(onRequest).listen(8888);
  console.log("Server has started.");
}

exports.start = start;
router.js 的文件
function route(pathname) {
  console.log("About to route a request for " + pathname);
}

exports.route = route;
扩展一下服务器的start()函数,以便将路由函数作为参数传递过去,server.js 文件
var http = require("http");
var url = require("url");

function start(route) {
  function onRequest(request, response) {
    var pathname = url.parse(request.url).pathname;
    console.log("Request for " + pathname + " received.");

    route(pathname);

    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write("Hello World");
    response.end();
  }

  http.createServer(onRequest).listen(8888);
  console.log("Server has started.");
}

exports.start = start;
相应扩展index.js
var server = require("./server");
var router = require("./router");

server.start(router.route);
全局对象:

__filename :表示当前正在执行的脚本的文件名。它将输出文件所在位置的绝对路径,且和命令行参数所指

的文件名不一定相同。 如果在模块中,返回的值是模块文件的路径。

__dirname :表示当前执行脚本所在的目录。

常用工具:

util 是一个Node.js 核心模块,提供常用函数的集合 用法:

var util = require('util'); 
function Base() { 
	this.name = 'base'; 
	this.base = 1991; 
	this.sayHello = function() { 
	console.log('Hello ' + this.name); 
	}; 
} 
Base.prototype.showName = function() { 
	console.log(this.name);
}; 
function Sub() { 
	this.name = 'sub'; 
} 
util.inherits(Sub, Base); 
var objBase = new Base(); 
objBase.showName(); 
objBase.sayHello(); 
console.log(objBase); 
var objSub = new Sub(); 
objSub.showName(); 
//objSub.sayHello(); 
console.log(objSub); 

文件 系统:

fs.open(path, flags[, mode], callback) 打开文件
fs.stat(path, callback) 读取文件信息

fs.writeFile(filename, data[, options], callback) 写入文件

fs.read(fd, buffer, offset, length, position, callback) 读取文件

fs.close(fd, callback) 关闭文件

fs.ftruncate(fd, len, callback) 截取文件

fs.unlink(path, callback) 删除文件

获取GET请求内容:

varhttp = require('http');
varurl = require('url');
varutil = require('util');
http.createServer(function(req,res){
res.writeHead(200,{'Content-Type':'text/plain'});
res.end(util.inspect(url.parse(req.url,true)));}).listen(3000);

获取 URL 的参数:

varhttp = require('http');
varurl = require('url');
varutil = require('util');
http.createServer(function(req,res){
res.writeHead(200,{'Content-Type':'text/plain'});// 解析 url 参数
varparams = url.parse(req.url,true).query;
res.write("网站名:" + params.name);res.write("\n");
res.write("网站 URL:" + params.url);res.end();}).listen(3000);

获取 POST 请求内容:

varhttp = require('http');

varquerystring = require('querystring');

http.createServer(function(req,res){

// 定义了一个post变量,用于暂存请求体的信息

varpost = '';

// 通过req的data事件监听函数,每当接受到请求体的数据,就累加到post变量中

req.on('data',function(chunk){

post += chunk;});

// 在end事件触发后,通过querystring.parse将post解析为真正的POST请求格式,然后向客户端返回。

req.on('end',function(){

post = querystring.parse(post);

res.end(util.inspect(post));});}).listen(3000);


Express 框架:

           varexpress = require('express');
varapp = express();
app.get('/',function(req,res){
res.send('Hello World');})
varserver = app.listen(8081,function(){
varhost = server.address().address
varport = server.address().port
console.log("应用实例,访问地址为 http://%s:%s",host,port)})

              express.static 中间件来设置静态文件路径:

                       app.use(express.static('public'));将图片, CSS, JavaScript 文件放在 public 目录下


 child_process 模块: 创建子进程

          exec()方法:child_process.exec(command[, options], callback)

spawn()方法:child_process.spawn(command[, args][, options])

fork()方法:child_process.fork(modulePath[, args][, options])


连接 MySQL:

var mysql = require ( ' mysql ' ) ;
var connection = mysql . createConnection ( {
host : ' localhost ' , user : ' root ' , password : ' 123456 ' , database : ' test ' }
connection . connect ( ) ;
connection . query ( ' SELECT 1 + 1 AS solution ' , function ( error , results , fields ) {
if ( error ) throw error ;
console . log ( ' The solution is: ' , results [ 0 ] . solution ) ; } ) ;


连接 MongoDB:

varMongoClient = require('mongodb').MongoClient;
varDB_CONN_STR = 'mongodb://localhost:27017/runoob'; # 数据库为 runoob
var insertData = function ( db , callback ) {
// 连接到表 site
var collection = db . collection ( ' site ' ) ;
// 插入数据
var data = [ { " name " : " 菜鸟教程 " , " url " : " www.runoob.com " } , { " name " : " 菜鸟工
" , " url " : " c.runoob.com " } ] ;
collection . insert ( data , function ( err , result ) {
if ( err ) {
console . log ( ' Error: ' + err ) ;
return ;
}
callback ( result ) ;
} ) ; }
MongoClient . connect ( DB_CONN_STR , function ( err , db ) {
console . log ( " 连接成功! " ) ;
insertData ( db , function ( result ) {
console . log ( result ) ;
db . close ( ) ; } ) ; } ) ;




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值