NodeJs学习(一)

1.NodeJs是什么?

不是一门语言,也不是一种框架,而是JavaScript运行时的一个环境。类似于浏览器,用来解析和执行js代码。不同于JavaScript,nodeJs是属于服务端的js。由某个天才从谷歌上摘下了V8引擎,目前V8引擎是公认的运行最快的引擎。

2.NodeJs中的JavaScript

不同于JavaScript,nodeJs没有Bom和DOM对象,也就是document,window等。采用ecmaScript中JavaScript基本的语言部分,例如变量,方法,数据类型,内置对象,Array等。Node 中为 JavaScript 提供了一些服务器级别的 API,例如http,fs,等。

在node中没有全局作用域的概念,通过require()方法来执行和加载多个自定义的js文件,或者加载node的api中提供的各类核心模块。

例如加载http通信服务的模块:

//1.加载http模块
var http = require("http");
//2.创建web服务器
var server = http.createServer();
//3.on方法中第一个参数是接受request请求,第二个是设置回调函数用于处理请求
server.on("request",function(){
	console.log("接受到请求了")
})
//4.开启服务器,设置端口号,设置回调
server.listen(3000,function(){
	console.log("打开服务器")
})

例如加载自己创建的js:

文件A.js

console.log("模块A开始");
var Bexports = require("./模块的引用B.js");
console.log(Bexports.fun(10,20));
console.log("模块A结束");

文件B.js

var method = function(x,y){
	console.log("你好,我是模块B");
	return x + y;
};
exports.fun = method;
var Cexports = require("./模块的引用C.js");
console.log(Cexports.foo)

文件C.js

var text = '你好,我是子模块C';
exports.foo = text;

A文件调用了B文件的method方法,而B文件调用C文件的text字符串,最后通过在cmd中找到路劲,通过node A.js命令,就会显示:

模块A开始
你好,我是子模块C
你好,我是模块B
30
模块A结束

其实很好理解,就好像Java面向对象的特点,一个对象拥有各个属性,方法等。通过给exports对象(默认情况下是空对象),来传递值或方法等。require调用其他文件必须有路径不能直接使用文件名,不然就等同于require('fs')加载node提供的核心模块,那么就无法调用了。关于模块的调用,外部无法访问内部文件,而内部文件也无法访问外部文件的,所以需要用到外部文件的东西时,需使用到exports对象。

关于Http和fs核心模块的读取文件实现交互的简单案例:

var http = require("http")
var fs = require("fs")

var server = http.createServer()
//通过判断request请求的不同路径,读取不同的文件,并设置对应的Content-type文本类型来显示文本信息
//以下分别获取了HTML页面和jpg格式的图片,end()方法只会显示字符串,而无法显示数字,数组,对象等
server.on("request",function(req,res){
	var url = req.url;
	if(url === '/html'){
		fs.readFile('./resource/hello.html',function(err,data){
			if(err){
				res.end("出错了,请重新操作")
			}else{
				res.setHeader("Content-Type","text/html;charset=utf-8")
				res.end(data)
			}
		})
	}
	if(url === '/image'){
		fs.readFile('./resource/五月天.jpg',function(err,data){
			if(err){
				res.end("出错了,请重新操作")
			}else{
				res.setHeader("Content-Type","image/jpeg")
				res.end(data)
			}
		})
	}
    if(url === "/index"){
		res.end("index.jsp")
	}
	if(url === "/json"){
		var json = [
			{
				name:"张三",
				age:18
			},
			{
				name:"李四",
				age:22
			},
			{
				name:"赵五",
				age:42
			}
		]
		res.end(JSON.stringify(json))
	}
	res.end("404 Not Found !")
	
})
server.listen(3000,function(){
	console.log("Server running ......")
})

关于fs模块写入文件的简单小例子:

var fs = require("fs");
//1.路径2.写入内容3.回调函数
fs.writeFile("data/write.txt","你好,世界,写入文件",function(err,data){
	if(err){
		console.log("创建文件失败");
	}else{
		console.log("创建文件成功");
	}
});

最后补充一个IP号+端口号的定义:127.0.0.1:3000

ip 地址定位计算机,计算机只有一个网卡,IP就相当于是计算的唯一标识;

端口号定位具体的应用程序,凡是要进行网络通信的都会有一个端口号,用于指定运行某个程序。

默认情况下,很多大型的应用程序都会使用80的端口,因为浏览器默认80端口,直接输入例如127.0.0.1的IP,而无需输入端口号就可直接登录服务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值