nodejs

1.安装下载
https://nodejs.org/en/download/
https://www.runoob.com/nodejs/nodejs-install-setup.html
2.nodejs介绍
	nodejs是一个运行在服务端的JavaScript
3.npm介绍
	npm是nodejs的包管理工具,类似于maven,每个模块都有自己的package.json文件,定义包的属性 
4.nodejs REPL(交互式解释器)
	Read Evel Print Loop,使用下划线"_"可以获取上一次输出的值
eg:
	10 + 10;
	console.log(_); 
5.nodejs的核心思想就是异步编程,nodejs所有的API都支持回调,Nodejs异步编程就是依赖于回调函数实现的;回调函数在完成任务后会自动被调用 
6.使用require指令来引入其他模块
eg:  var http = require('http');
7.nodejs同步阻塞代码
var fs = require('fs');		//FileSystem
var data = fs.readFileSync('./input.txt');
console.log(data.toString());
console.log('process over ...'); 
8.nodejs异步回调
var fs  = requie('fs');
 fs.readFile('./input.txt',function(err,data){
     if(err){
         console.log('error...');
     }
     console.log(data.toString());
 });
console.log('process is over ...'); 
8.nodejs事件
	类似于NIO或者观察者模式,一个主题subject循环监听事件,当触发事件后,subject将事件交给观察者observer来执行事件,Nodejs内置事件驱动模型,引入events模块即可;当使用EventEmitter.on绑定事件时,会触发newListenre事件,移除事件时触发removeListener事件;
9.在 Node 应用程序中,回调函数的第一个参数接收错误对象,最后一个参数封装异步函数的返回值。
通常使用if(err){...}判断是否出错,err为null或者undefined则没出错
10.error事件
	EventEmitter默认定义了一个error事件,如果没有手动声明error事件处理器,它会将异常抛出到Nodejs应用进程中,导致整个程序崩溃;所以通常需要对error事件进行处理,类似于try catch;
 eg:       eventEmitter.on('error',function(){
     			console.log('process is error');
 			});
 11.Buffer缓冲区
 //创建缓冲区数据
 const buf = Buffer.from('Hello world ...','utf-8');
 //将数据写入缓冲区,指定256字节
 var limit = Buffer.alloc(256);
 var len = limit.write('Hello world ...');     //返回值是写入的字节数       
 //读取缓冲区数据
 console.log(buf.toString('utf-8'));
1.nodejs模块
	一个nodejs文件就是一个模块,require引入文件,默认是.js文件
eg:  var hello = require('./hello');  代码 require('./hello') 引入了当前目录下的 hello.js 文件(./ 为当前目录,node.js 默认后缀为 js)。
2.Node.js 提供了 exports 和 require 两个对象,其中 exports 是模块公开的接口,require 用于从外部获取一个模块的接口,即所获取模块的 exports 对象。
eg:    var hello = require('./hello.js');
		hello.say();
	//------------------------------------
    	exports.say = function(){
    		console.log('hello world...');
    	}
 3.exports 和 module.exports 的使用
如果要对外暴露属性或方法,就用 exports 就行,要暴露对象(类似class,包含了很多属性和方法),就用 module.exports。
4.一个函数可以作为另一个函数的参数。我们可以先定义一个函数,然后传递,也可以在传递参数的地方直接定义函数。
5.require('../local');  //nodejs引入一个文件夹
默认会先去找package.json文件,再去在main;如果找不到就默认找index.js
6.nodejs全局对象global,相当于js中的window对象,在所有的nodejs象中,所有的全局变量(除了global对象本身)都是global对象的属性,global对象的作用就是作为其他变量的宿主 
7."__filename"可以获得文件的全路径,相当于file.getAbsolutePath();
"__dirname":目录
8.使用 express.static 中间件来设置静态文件路径
app.use('/public',express.static('public'));//浏览器输入/public*可以直接访问public目录下资源
//引入node事件模块
var events = require('events');
//创建事件实例化对象
var eventEmitter = new events.EventEmitter();
//声明连接事件处理器
var connectionHandler = function(){
	console.log('database is connected ...');
}
//绑定事件
eventEmitter.on('connection',connectionHandler);//触发事件
eventEmitter.emit('connection');
node connection mysql
安装mysql模块
cnpm install mysql

//引入mysql模块
var mysql = require('mysql');
//获取连接对象
var connection = mysql.createConnection({
    host: '127.0.0.1',
    port: 2433,
    user: 'root',
    password: 'root',
    database: 'test'
});
//建立连接
connection.connect();
var sql = 'select * from t_u_user';
//crud都用query
connection.query(sql,function(error,results){
    if(error){
        throw error;
    }
    console.log(results);
});
//释放资源
connection.end();


node demo
==>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 context path :' + pathname);
		route(pathname);
		response.writeHead(200,{'Content-Type':'text/html'});
		response.write('hello world...');
		response.end();
	}
	http.createServer(onRequest).listen(8888);
}
expores.start = start ; 

==>router.js
function route(pathname){
	console.log(pathname);
}
exports.route = route;

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

在这里插入图片描述

node require加载顺序
当使用require('http')引入http模块时,即使当前目录下的确存在http.js/http.node ....文件,node也会优先从原生模块加载http模块

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值