node.js的特点
单线程:只有一个线程执行任务
非堵塞I/O:在I/O耗时操作时,线程不堵塞
事件驱动:使用事件驱动程序往下继续运行
node,js模块化
规范:遵循common.js规范
加载模块的时候同步。当遇到require() 语句时,会停下来等加载完成然后继续往下执行。
暴露模块的时候推荐通过exports.xx = 或 module.exports.xx = 或 module.exports = 向外暴露。
在node,js中,每一个JS文件就是一个模块
在node,js中,分为内置核心模块 和 自定义模块(或者第三方模块)
内置核心模块:
这些模块是node,js自带的,比如http url querystring fs(FileSystem)
引入方式:直接调用名称引入
var http = require("http");
var url = require("url");
var fs = require("fs");
自定义模块(或者第三方模块):
引入方式:使用“./”开头 加上 名称
//在A.js文件中
var b = require("./B");
注意:
但是假如自定义模块(或者第三方模块)放在node_modules目录下,放进去的模块就跟内置核心模块一样的引入方式
//在A.js文件中
//因为B.js文件放在了node_modules目录下,可以直接使用名称引入
var b = require("B");
这种方式引入,看上去像是引入了核心模块 其实只是一种假象 moduleA并不是变成了核心模块 只是引入方式一样了。
var moduleA = require("moduleA");
当同一级目录中有node_modules文件夹时,并且里面有moduleA模块 并且上一级目录中有node_modules文件夹,里面也有moduleA模块时,会引用同级目录下的node_modules文件夹中的模块
当同级有node_modules文件夹但是没有moduleA模块, 但是上级有node_modules文件夹也有moduleA模块,此时会使用上级的moduleA模块
// 注意!!!! 这种方式引入,看上去像是引入了核心模块 其实只是一种假象 moduleA并不是变成了核心模块 只是引入方式一样了。
var moduleA = require("moduleA");
// 当同一级目录中有node_modules文件夹时,并且里面有moduleA模块 并且上一级目录中有node_modules文件夹,里面也有moduleA模块时
// 此时,会引用同级目录下的node_modules文件夹中的模块
// 当同级有node_modules文件夹但是没有moduleA模块, 但是上级有node_modules文件夹也有moduleA模块,此时会使用上级的moduleA模块
模块暴露:node.js 向外暴露的方式与sea.js一样,推荐module.exports 或者exports.
module.exports.c = c;
module.exports = c;
exports.c = c;
http模块
搭建服务器
// 调用createServer来创建服务器
var server = http.createServer(function(req, res) {
})
req对象:请求对象 所有的请求时浏览器附加的信息都可以从req身上获取
req.url 请求对象中url地址的path部分(pathname + search)
注意:url地址的组成部分
req.method 请求对象中请求方式get 还是 post 返回值是大写
req.connection.remoteAddress 请求对象中访问服务器的客户端的IP地址
req.on("data", function(data_chunk){ }) 在处理post请求时,请求数据时
req.on("end", function(){ }) 在处理post请求时,请求数据完毕时
res对象:响应对象 决定返回结果给前端由res决定
res.setHeader( ) 设置响应对象的响应头
res.end(data) 该方法决定返回内容并挂断连接
注意:这里的data必须是buffer类型或者字符串类型 buffer类型调用toString()方法
res.write(data) 该方法决定返回内容但是不挂断连接
res.status 决定响应状态
监听服务器
第一个参数:端口号
第二个参数:IP地址
// 将当前服务绑定到某个端口
server.listen(3000, "192.168.2.187");
// HTTP模块用于搭建服务器
var http = require("http");
// console.log(http);
// 调用createServer来创建服务器
var server = http.createServer(function(req, res) {
// req: request 前端请求对象 所有的请求时浏览器附加的信息都可以从req身上获取
// res: response 后端响应对象 决定返回什么东西给前端由res决定
// 当前函数在每一次前端有请求到达服务器的时候会调用
// console.log(req.url); // 请求url中path部分
// console.log(req.method); // 请求类型
console.log(req.connection.remoteAddress);
})
// console.log(server);
// 将当前服务绑定到