Nodejs Express框架入门

Node安装

设置全局路径和缓存路径

缓存:npm config set cache “D:\web\Program_Files\nodejs\node_cache”

全局:npm config set prefix “D:\web\Program_Files\nodejs\node_global”

查看结果:npm config ls (-l)

介绍

Nodejs Express是node的web开发框架,它有以下特点:

Unopinionated

不限制应用设计模式(MVC,MVP)

不限制代码规范

不限制功能的选择(是否含View层生成HTML页面)

本教程将演示用express处理GET,POST,PUT,DELETE请求,使用router定义子路由,不涉及数据库

操作

准备工作

创建express项目,初始化一个nodejs项目

mkdir express-hello-world
cd express-hello-world
yarn init -y

yarn add express

code-insiders - //似乎是打开vscode的命令

打开vscode,创建一个app.js文件

// 创建express实例,代表服务器
const express = require("express");
const app = express();

// 设置监听端口
const port = 3000;

// 调用listen方法启动服务器并监听端口,启动成功后打印成功信息
app.listen(port,() => {
console.log(`Express server listening at http://localhost:${port}`);
})


编写完成后,打开终端,输入命令node app.js启动express服务
启动成功会显示日志Express server listening at http://localhost:3000

locathost代表本机地址,此时express服务虽然已经启动,但它现在并不能任何事情。

如果使用浏览器打开这个网址,会显示cannot GET /

这是因为程序还没处理url路由和http请求

处理GET请求

接下来创建一个简单的处理GET请求的程序

// 调用get方法,第一个参数是请求的路径,这里处理根路径的请求
// 第二个参数是处理请求的回调函数,参数分别为请求和响应对象
// 在回调函数里,调用处理请求的send方法,发送响应给客户端
app.get("/",(req,res) => {
	res.send("Hello World");
});

此时重启客户端,就可以看到Hello World

处理POST请求

同理,编写一个处理POST请求的方法

// 添加中间件 自定义的 扩展Express功能 请求前、响应前做特定操作
app.use(express.json());

app.post("/",(req,res) => {
	console.log("收到请求体:",req.body);
	res.status(201).send();
});

使用postman(官网:http://www.postman.com)下载

打开postman(一个处理网页请求的工具),输入我们创建的express服务器地址http://localhost:3000左边选项选择POST,选择body,复选框部分选择raw,下拉菜单选择json在下面的文本框中编写一条实例对象数据,例如:

{
	"name":"Cerelise"
}

接着点击send按钮,稍等一下就可以看到返回的201状态码,可以看到打印出请求体的json数据

处理PUT请求

put用来更新服务器上的资源,需要知道已存在资源的唯一标识,一般是数据库中的id
客户端发送put请求时,在url中提供标识参数,然后在express中解析出来,根据标识更新服务器的资源。

调用put方法创建put请求 路径后面的冒号id的意思时根路径后面的值都会作为请求的参数,并且赋值给名为id的变量,比如http://localhost:3000/3,此时id的值为3

// 打印请求参数的值 req.params.id
// 打印请求体 返回响应,默认是200
app.put("/:id",(req,res) => {
	console.log("收到请求参数,id为:",req.params.id);
	console.log("收到请求体:",req.body);
	res.send();
})

重启服务器,在postman中测试请求

选择PUT,路径可以为http://localhost:3000/3,填写实例仍是json格式:

{
	"name":"Trump"
}

点击发送,可以看到返回了200状态码,再回到终端,可以看到打印出id的值和请求体的json数据

处理DELETE请求

delete用于删除服务器的资源,跟put一样需要唯一标识,这里使用delete方法,最后返回204代码,代表已删除此请求

app.delete("/:id", (req,res) => {
	console.log("收到请求参数,id为:",req.params.id);
	res.status(204).send();
})

重启服务,使用postman进行测试

复制选项卡,选择DELETE,去掉body(复选框选择none)

然后点击send,看到返回了204状态码

终端也打印出了请求参数

创建路由示例

对于一个express项目,一般会有多组api,比如

文章 /post

产品 /product

订单 /order

然后分配到子路由处理,这里以文章为例模拟一个POST的路由

创建routes文件夹,在里边新建一个post.js文件

我们导入express,创建一个route实例,用于处理子路由。

接下来把app.js的四个请求处理代码复制至post.js,把app改成route,把文字做一些改变

const express = require("express");
const route = express.Router();

// GET请求返回实例数据
route.get("/",(req,res) => {
	res.send({ id: 1, title: 'express入门教程·'});
});

// 在POST和PUT请求中把创建和更新后的资源返回给客户端,以便后续使用
app.post("/",(req,res) => {
	console.log("保存文章:",req.body);
	res.status(201).send({ id:2,...req.body });
});

route.put("/id",(req,res) => {
	console.log("收到请求参数,文章id为:",req.params.id);
	console.log("收到请求体,新的文章内容为:",req.body);
	res.send({id:req.params.id, ...req.body});
})

route.delete("/:id", (req,res) => {
	console.log("收到请求参数,文章id为:",req.params.id);
	res.status(204).send();
})

// 然后导出子路由变量
module.exports = route;

最后在主路由(app.js)导入它,并挂载到/POST,分配到子路由下

// 创建express实例,代表服务器
const express = require("express");
const app = express();

// 设置监听端口
const port = 3000;
const post = require("./routes/post");

app.use(express.json());

app.use("/post",post)
routes(app);

app.get("/",(req,res) => {
	res.send("Hello World");
});

app.post("/",(req,res) => {
	console.log("收到请求体:",req.body);
	res.status(201).send();
});

app.put("/id",(req,res) => {
	console.log("收到请求参数,id为:",req.params.id);
	console.log("收到请求体:",req.body);
	res.send();
})

app.delete("/:id", (req,res) => {
	console.log("收到请求参数,id为:",req.params.id);
	res.status(204).send();
})

// 调用listen方法启动服务器并监听端口,启动成功后打印成功信息
app.listen(port,() => {
console.log("Express server listening at http://localhost:${port}");
})


重启服务,再测试一下POST请求

因为项目有多个子路由,为了不使app.js文件过于庞大,可以新建一个index.js,用于统一处理路由的挂载,由它引入子路由,然后导出一个函数,接收app对象,挂载子路由。

const post = require("./post");
moudle.exports = (app) => {
	app.use("/post",post);
};

后面只需要在app.js中引入routes文件夹

routes(app);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值