NodeJS——用express创建一个简单的服务器

express

上一节我们讲了如何用http模块去创建服务器,但是大家会发现当url变得越来越多时,用http来创建的服务器所有的访问地址全在一起,就会显得很混乱,而且访问性能也不是最好的。所以后面就提出了express。它基于NodeJS平台、快速、开发、极简的web开发框架。它创建web服务器的步骤: 1、引入模块 const express=require(‘require’); 2、创建服务器 var app=express(); 3、添加端口号 app.listen(8080);` express创建服务器和http模块创建服务器的三步都相似,但是express提出了路由和路由器的概念。或许很多人会想路由到底是什么?就举个例子,在任何一个网站都有用户注册,登录,用户的增删改查等很多功能,而一个路由就是指其中的一个功能。而所有的路由最终都会搭载在路由器上,即由路由器管理这些路由。

路由

上面我们说了在一个功能就相当于一个路由。那具体解释是如何? HTTP客户端发来请求,服务器端程序会根据会根据请求方法和请求url确定一个响应方法,而在express中的路由即由三部分组成:

app.METHOD(URL,function(req,res){
          
   });

METHOD:请求方法(get/post) URL:请求的url res:响应对象 : send 设置响应内容并发送请求,路由中只能使用一次 : sendFile 设置文件并发送,必须使用绝对路径 : redirect() 响应的重定向,跳转到另一个url req:请求对象 : query:获取请求的查询字符串的数据,格式为对象 : params:获取路由传参的数据,格式是对象 路由传参:

app.get(;/order/:did,function(req,res){
          
   
 	req.params;//获取路由传参的数据
});

例子:创建路由,请求的方法get,请求的url:/shopping,使用路由传参来传递商品的价格和规格,然后把价格和规格显示到浏览器中

app.get(shopping/:price/:spec,function(req,res){
          
   
	res.send(`
		价格:${
            
     req.params.price}<br>
		规格:${
            
     req.params.spec}
	`);
});

例子:练习: 使用express创建web服务器,创建登录路由(获取登录的html),请求的方法:get,请求的url: /login,响应文件login.html

app.get(/login,function(req,res){
          
   
	res.sendFile(__dirname+login.html文件路径);
});

获取post请求的数据

//请求方法:post 请求url:/mylogin
//响应’登录成功
app.post(/mylogin,function(req,res){
          
   
	//获取post请求传递的数据
	//监听是否有数据传递,自动触发回调函数
	req.on(data,function(chunk){
          
   
		//chunk就是传递的数据
		var str=chunk.toString();
		//把查询字符串解析为对象 
		var obj=querystring.parse(str);
		console.log(obj);
	});
	res.send(登入成功);
});

路由器

在一个项目中出现相同的url是很常见的,用户有list功能,而商品也有list功能。为了避免出现混淆,路由器可将同一模块下的所有的路由管理起来,路由器最终要挂载到web服务器下才能使用。 1、创建路由器模块

const express=require(express);
//创建路由器对象
const router=express.Router();
//添加路由
router.get(/user,function(req,res){
          
   
	res.send(响应内容);
});

2、在服务器中使用并引入

//创建服务器
const express=require(express);
//引入路由器模块
const userRouter=require(/user.js);
var app=express();
app.listen(8080);
//在服务器中使用路由器,并在所有的url中添加前缀,访问形式   /user/list
app.use(/user,userRouter);
经验分享 程序员 微信小程序 职场和发展