首页 > 编程语言 >Node.js之Express

Node.js之Express

时间:2024-07-07 13:30:28浏览次数:22  
标签:Node function req res app Express send js express

Express介绍

Express是一个简洁、灵活的node.js Web应用开发框架,是目前最流行的基于Node.js的Web开发框架. 它提供一系列强大的功能,比如:

  • 模板解析
  • 静态文件服务
  • 中间件
  • 路由控制

还可以使用其他模块来帮助你创建各种Web和移动设备应用

使用express

本地安装

$ npm install express

获取、引用 通过变量app我们就可以调用express的各种方法

var express = require('express');
var app = express();

app.listen(3000);

思考: express的本质上是什么,是如何工作的

get请求

根据请求路径来处理客户端发出的GET请求 语法

app.get(path,function(request, response));
  • 第一个参数path为请求的路径
  • 第二个参数为处理请求的回调函数,有两个参数分别是
    • request 代表请求信息
    • response 代表响应信息
var express = require('express');
var app = express();
app.get('/',function(req,res){
    res.end('welcome to  首页');
});
app.get('/about',function(req,res){
 res.end('欢迎来到关于我们');
})
app.listen(3000);

curl客户端使用方法

  • 指定请求头

    curl -H 'content-type:application/json;charset=utf-8' http://localhost:8080/users
    
  • 指定方法名

    curl -X POST http://localhost:8080/users
    
  • 指定请求体

    curl --data "name=zfpx&age=8" http://localhost:8080/users
    

all

app.all()函数可以匹配所有的HTTP动词 路由中的星号能匹配所有的路径 语法

app.all(path,function(request, response));

示例

var express = require('express');//引入express
var app = express();
app.all("*",function(req,res){
 res.send("404");
})
app.listen(3000);

获取请求参数

  • req.host 返回请求头里取的主机名(不包含端口号)
  • req.path 返回请求的URL的路径名
app.get('/',function(req,res){
   res.end('欢迎来到首页'+req.host+" "+req.path);
});

获得查询字符串

//http://localhost:3000/?a=1&b=2&c=3
app.get('/',function(req,res){
   res.send(req.query);
});

params路径参数

req.params可以用来获取请求URL中的参数值

app.get('/:id/:name',function(req,res){
   res.send(req.params.id+" "+req.params.name);
});

中间件

中间件就是处理HTTP请求的函数,用来完成各种特定的任务 比如检查用户是否登录、检测用户是否有权限访问等,它的特点是:

  • 一个中间件处理完请求和响应可以把相应数据再传递给下一个中间件
  • 回调函数的next参数,表示接受其他中间件的调用,函数体中的next(),表示将请求数据传递给下一个中间件
  • 还可以根据路径来区分进行返回执行不同的中间件
var express = require('express');
var app = express();
var path = require('path');

app.use(function(req,res,next){
 res.setHeader('Content-Type','text/plain;charset=utf-8');
 next();
});

app.get('/',function(req,res){
 res.end('首页');
});
app.get('/about',function(req,res){
 res.end('关于我们');
});

app.listen(3000);

send

send方法向浏览器发送一个响应信息,并可以智能处理不同类型的数据 并在输出响应时会自动进行一些设置,比如HEAD信息、HTTP缓存支持等等。 语法

res.send([body|status], [body])

示例 1.当参数为一个String时,Content-Type默认设置为"text/html"。

res.send('Hello World'); //Hello World

2.当参数为Array或Object时,Express会返回一个JSON

res.send({ user: 'tobi' }); //{"user":"tobi"}
res.send([1,2,3]); //[1,2,3]

3.当参数为一个Number时,并且没有上面提到的任何一条在响应体里,Express会帮你设置一个响应体,比如:200会返回字符"OK"

res.send(200); // OK
res.send(404); // Not Found
res.send(500); // Internal Server Error

模板

在nodejs中使用express框架,它默认的是ejs和jade渲染模板

安装模板

npm install ejs

使用模板

使用ejs模板

//指定渲染模板文件的后缀名为ejs
app.set('view engine', 'ejs');
app.set('views',path.join(__dirname,'views'));
res.render('index');

index.ejs

<!DOCTYPE html>
<html>
<head>
  <title>My First EJS Template</title>
</head>
<body>
  <h1>Hello, <%= name %>!</h1>
</body>
</html>

模板使用html后缀

// 修改模板文件的后缀名为html
app.set( 'view engine', 'html' );
app.set('views',path.join(__dirname,'views'));
// 运行ejs模块
app.engine( '.html', require( 'ejs' ).__express ); //__express是ejs模块的一个公共属性,表示要渲染的文件扩展名

渲染视图

语法

  • 参数view就是模板的文件名
  • 在渲染模板时locals可为其模板传入变量值
  • callback用来处理返回的渲染后的字符串
res.render(view, [locals], callback);

模板原理

var tmpl = '<h1>{{name}}</h1><h1>{{age}}</h1>';
var data = {name:'zfpx',age:30};
var html= tmpl.replace(/\{\{(\w+)\}\}/g,function(input,group){
    return data[group];
})

console.log(html);

静态文件服务器

如果要在网页中加载静态文件(css、js、img),就需要另外指定一个存放静态文件的目录,当浏览器发出非HTML文件请求时,服务器端就会到这个目录下去寻找相关文件

app.use(express.static(path.join(__dirname,'/')));

重定向

redirect方法允许网址的重定向,跳转到指定的url并且可以指定status,默认为302方式。 语法

res.redirect([status], url);

示例

res.redirect("http://www.baidu.com");

post请求

post方法 根据请求路径来处理客户端发出的Post请求 语法

app.post(path,function(req, res));

示例

const express = require('express');
const bodyParser = require('body-parser');
const app = express();
// 设置body-parser中间件以解析请求体
app.use(bodyParser.urlencoded({ extended: true }));
app.get('/login', (req, res) => {
  res.send(`
    <form action="/login" method="post">
      <input type="text" name="username" />
      <input type="submit" value="提交" />
    </form>
  `);
});

app.post('/login', (req, res) => {
  res.cookie('username', req.body.username);
  res.redirect('/user');
});

app.get('/user', (req, res) => {
  if (req.cookies && req.cookies.username) {
    res.send(req.cookies.username);
  } else {
    res.redirect('/login');
  }
});
app.listen(8080, () => {
  console.log('Server is running at http://localhost:8080');
});

标签:Node,function,req,res,app,Express,send,js,express
From: https://blog.csdn.net/qq_40588441/article/details/140245016

相关文章

  • CesiumJS【Basic】- #073 日月矢量
    文章目录日月矢量1目标2代码日月矢量1目标绘制对日矢量和对月矢量2代码/**@Author:alan.lau*@Date:2024-06-1611:15:48*@LastEditTime:2024-06-1611:43:02*@LastEditors:alan.lau*@Description:*@FilePath:\my-cesium......
  • kubernetes集群部署:node节点部署和cri-docker运行时安装(四)
    安装前准备同《kubernetes集群部署:环境准备及master节点部署(二)》安装cri-docker在Kubernetes1.20版本之前,Docker是Kubernetes默认的容器运行时。然而,Kubernetes社区决定在Kubernetes1.20及以后的版本中逐步淘汰对Docker的直接支持,一直到Kubernetes1.24版本彻底......
  • node.js_HTTP协议
    HypertextTransferProtocol  超文本传输协议1.HTTP报文 请求行 请求头请求体 它的内容形式很灵活,可以设置任意内容  2.HTTP响应报文响应状态码响应状态的描述遇到陌生的状态码可以参考一下这个网址:https://developer.mozilla.org/zh-CN/docs/Web/HT......
  • Java语言,MySQL数据库;基于springboot的阅读系统 86095(免费领源码)计算机毕业设计项目推
    摘 要从古至今,阅读都是人们学习新技能,新知识的一种方式。随着互联网时代的到来,传统的纸质阅读早已满足不了人们对于阅读的渴望。在这样的大背景下,电子阅读便快速崛起。越来越多的人们喜欢愿意通过这样方式来阅读书籍。基于以上种种,本文设计并实现了书籍阅读系统。目的在于......
  • Java语言,MySQL数据库;基于微信小程序的安全教育平台面向大学生 85871(免费领源码)计算机
    目 录摘要1绪论1.1研究背景1.2研究现状1.3论文结构与章节安排2 基于微信小程序的安全教育平台面向大学生系统分析2.1可行性分析2.2系统流程分析2.2.1数据增加流程2.2.2数据修改流程2.2.3数据删除流程2.3系统功能分析2.3.1功能性分析......
  • 计算机毕业设计项目推荐:66945 同城信息网(开题答辩+程序定制+全套文案 )上万套实战教程
    摘要随着社会的发展,社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。本文以实际运用为开发背景,运用软件工程原理和开发方法,它主要是采SSM技术和mysql数据库来完成对系统的设计。整个开发过程首先对同城信息网进行需求分析,得出......
  • nodejs和npm安装与配置
    nodejs官网:http://nodejs.cn/百度网盘下载链接:https://pan.baidu.com/s/1RfjeN1bt-I-tf351xi8cgw提取码:sybk下载官网的稳定版msi安装包nodejs默认安装配置了npm进入cmd命令行(以管理员身份打开)node-v npm-v        查看版本,检查安装设置npm淘宝镜像......
  • CesiumJS【Basic】- #072 太阳和月亮的位置
    文章目录太阳和月亮的位置1目标2代码太阳和月亮的位置1目标获得当前时刻太阳和月亮的位置信息2代码import*asCesiumfrom"cesium";constviewer=newCesium.Viewer("cesiumContainer",{terrain:Cesium.......
  • 原生js上传图片至阿里云oss并回显,配合上个帖子的java使用
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Invoice</title>......
  • 前端JS特效第15集:HTML5电脑端微信聊天窗口界面
    HTML5电脑端微信聊天窗口界面,先来看看效果:部分核心的代码如下(全部代码在文章末尾):<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1"><......