nodeJS 的概念
Node.js是一个基于Chrome V8引擎(编译成原生机器码)的让JavaScript运行在服务器端的运行环境,它让JavaScript的触角伸到了服务器端。
nodeJS的特性
1.单线程
NodeJS在访问高IO操作后不会等待其完成,而是立即去执行其他代码,操作完成后会使用回调函数返回,保证高效的利用
当前线程的cpu 不造成硬件浪费
2.非阻塞IOf
NodeJS在访问高IO操作后不会等待其完成,而是立即去执行其他代码,操作完成后会使用回调函数返回
保证高效的利用当前线程的cpu 不造成硬件浪费
3.事件驱动
由于是单线程,所以把高io的操作 就会移动到事件队列中等待完成,完成后通过回调函数的方式返回给线程来进行处理。
这个循环处理的过程称之为:事件环
4.运行node
在cmd中输入node+空格+文件路径
模块的概念
node中以模块来划分功能,一个js是一个模块,多个模块相互引用形成一个模块化式项目
模块的书写
s文件因为作用域的问题,变量和函数只能在当前文件中进行使用,如果在当前模块外引用,必须使用exports/module.exports(特定的类型使用)让这些内容进行暴漏,使用的时候使用require来进行引入
module.exports调用构造函数的时候使用不需要键值
模块的优点
1.减少代码重复,提高利用率
2.划分功能,方便管理
3.方便使用第三方模块
路由就是根据对不同的请求,找到不同的代码完成处理
HTTP模块
a界面
var uname = "haha";
exports.uname = uname;
function fun(){
console.log("我是一个函数")
}
exports.fun = fun;
function Numbera(n){
this.num = n;
}
module.exports=Numbera;
b界面
var a = require("./a");
console.log(a.uname);
var fun = require("./a");
a.fun();
var newNum = new a(2);
console.log(newNum.num);
注意:函数暴露的时候一定不要加()
url模块
登陆eg:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>登陆</title>
</head>
<body>
<form action="http://localhost:8888/login">
<input type="text">
<input type="text">
<input type="submit" value="登陆">
</form>
</body>
</html>
注册eg:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>注册</title>
</head>
<body>
<form action="http://localhost:8888/register">
<input type="text">
<input type="text">
<input type="submit" value="注册">
</form>
</body>
</html>
JSeg:
// 1.http模块的引用
var http = require("http")
// 2.创建服务
var url = require("url");
//req请求 res响应
http.createServer(function(req,res){
//解决中文乱码问题
res.writeHead(200,{"Content-type":"text/html;charset=utf-8"});
var urlPath = url.parse(req.url);
//解决二次请求问题,第二次请求图标/favicon.icon
if(urlPath.pathname=="/favicon.icon"){
return;
}
if(urlPath.pathname=="/login"){
res.write("您执行了登陆操作");
}else if(urlPath.pathname=="/register"){
res.write("您执行了注册操作");
}else{
res.write("您的操作有误,请核实后再输");
}
res.end();
}).listen(8888)//监听端口
express
概念:
是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性和丰富的 HTTP 工具
功能:
1.扩展了web所需要的基本功能
2.丰富了HTTP工具
3.可以快速搭建一个网站
初始化:
npm init
下载:
npm install --save express
路由
通过URL路径来区分不同的请求,从而找到
不同的功能模块来进行执行。
1.路由是根据url 决定了那部分去响应客户端请求。
2.在HTTP请求中,可以通过路由提取出请求的URL以及GET/POST参数。
eg:
var express = require("express");
var app = express();
app.get("/",function(req,res){
res.send("heihei");
})
// 定义中间件,每一次请求后都会先经过中间件
app.use(function(req,res,next){
console.log("你好");
// 如果没有next就会卡死,不执行后面的了-
next();
})
// 路由的使用
app.get("/index",function(req,res){
res.send("我是index");
})
app.get("/home",function(req,res){
res.send("我是home");
})
//只要是a开头b结尾都可以
app.get("/a*b",function(req,res){
res.send("我是通配");
})
app.get("/post",function(req,res){
res.send("我是get的post");
})
app.post("/post",function(req,res){
res.send("我是post");
})
app.listen(8888);