文件操作_http构建服务器_多模块执行【node笔记一】

一、文件操作

fs是file-system的简写
在node中进行文件操作必须要引入fs这个核心模块儿,该模块儿提供了对所有文件进行操作相关的API

1.使用require方法加载fs核心模块

require是一个方法,有两个作用:

  • 用来加载模块,并执行其中代码
  • 接收加载模块导出的接口对象exports

模块有三种:

  • 核心模块(内置模块)
  • 用户自定义的文件模块
  • 第三方模块
var fs = require('fs');
2.读取文件
/*
 第一个参数是读取的文件全路径
 第二个参数是一个回调函数
*/
fs.readFile('hello.txt',function(error,data){
    
    
	/*
	 读取成功
	 data 数据
	 error null
	 读取失败
	 data undefined没有定义
	 error 错误对象
	*/
	console.log(data);
	/*
	 默认读取文件是16进制
	 使用toString方法进行转换
	*/
	console.log(data.toString);
});
3.写出文件
var fs = require('fs');
/*
 第一个参数:文件路径全名
 第二个参数:文件内容
 第三个参数:回调函数
*/
fs.writeFile('hello.txt','hello node',function(error){
    
    
	/*
	 成功:
	 文件写入成功
	 error null
	 失败:
	 文件写入失败
	 error 错误对象
	*/
	console.log('文件写入成功');
});
4.回调函数判断结果
//读取文件
var fs = require('fs');
fs.readFile('hello.txt',function(error,data){
    
    
	//通过判断error确认是否读取成功
	if(error){
    
    
		console.log('读取文件失败了');
	}else{
    
    
		console.log(data.toString);
	}
});

//文件写出
fs.writeFile('hello.txt','hello node',function(error){
    
    
	//通过判断error确认是否写入成功
	if(error){
    
    
		console.log('写入失败');
	}else{
    
    
		console.log('写入成功');
	}
});

二、http构建服务器

node中提供了一个核心模块:http,用来创建服务器

1.加载http核心模块
var http = require('http');
2.使用http.createServer()方法创建一个Web服务器
//返回一个Server实例
var server = http.createServer()
3.服务器作用
  • 提供服务:对数据的服务
  • 发送请求
  • 接受请求
  • 处理请求
  • 反馈(发送响应)
  • 注册request请求事件
  • 当客户端请求过来,就会自动触发服务器的request请求的事件,然后执行第二个参数:回调处理函数
4.监听request请求事件,设置请求处理函数
server.on('request',function(){
    
    
	console.log('收到客户端的请求了');
});
5.绑定端口号,启动服务器
server.listen(3000,function(){
    
     //如果报错‘ EADDRINUSE :::端口号 ’,说明该端口号被占用了
	console.log('服务器启动成功了,可以通过 http://127.0.0.1:3000/ 来进行访问');
});

注:以上代码可以运行,cmd直接打开js文件即可运行,此时浏览器访问后控制台可以输出日志,但是没有响应,浏览器会一直处于等待状态

6.简单的响应代码
var http = require('http');
var server = http.createServer();
/*
 request 请求事件处理函数,需要接受两个参数
 request 请求对象,可以用来获取客户端的一些请求消息
 response 响应对象,可以用来给客户端发送响应消息
*/
server.on('request',function(request,response){
    
    
	//获取客户端请求的路径(服务器地址端口号之后的路径)
	console.log('收到客户端的请求了,请求路径是:'+request.url);
	//response对象有一个方法:write,可以用来给客户端发送响应数据,可以使用多次,但最后必须只用end来结束响应,否则客户端会一直处于等待状态,也就是响应未结束,浏览器不会呈现数据
	//只能响应字符串或二进制
	response.write('hello');
	response.write('nodejs');
	response.end();
	//一般在end的同时去响应数据
	response.end('hello nodejs');
	//此时无论请求路径为多少,响应都是hello nodejs,可以利用request.url判断路径,来响应相对应的数据
});
server.listen(3000,function(){
    
    
	console.log('服务器启动成功');
});
7.根据请求路径响应数据
var http = require('http');
var server = http.createServer();
server.on('request',function(req,res){
    
    
	var url = req.url;
	if(url === '/'){
    
    
		res.end('index page');
	}else if(url === '/login'){
    
    
		res.end('login page');
	}else{
    
    
		res.end('404 Not Found.');
	}
	//响应json
	var goods = [
		{
    
    
			name:"goods1",
			price:100
		},
		{
    
    
			name:"goods2",
			price:200
		},
		{
    
    
			name:"goods3",
			price:300
		}
	]
	if(url === '/goods'){
    
    
		res.end(JSON.stringify(goods));
	}
});
server.listen(80,function(){
    
     //浏览器默认以80位端口号
	console.log('服务器启动成功');
});

三、多模块执行

1.通过require加载其他js

一个js文件中可以通过require来调用其他模块的代码,顺序是从上向下依次执行,即当执行到require时执行完加载的代码后再执行后面的代码
相对路径中必须加 ./,不能省略
在node中没有全局作用域模块作用域,也就是通过require联系起来的js文件中的代码不会相互影响

//a.js
console.log('a start');
require('./b.js'); //后缀名可以省略
console.log('a end');

//b.js
console.log('b start');

//执行结果
a start
b start
a end
2.访问其他js中的变量和方法
//a.js
var exports_b = require('./b'); //获取b的exports对象
console.log(exprots_b.text);
console.log(exports_b.test());

//b.js
exports.text = 'hello'; //将text = 'hello'放到exports对象中
exports.test = function(a){
    
    
	return a;
}

猜你喜欢

转载自blog.csdn.net/jl15988/article/details/109384157
今日推荐