node.js express 从零开始简单说一说
connygpt 2024-12-12 11:28 5 浏览
一、介绍
1.1 什么是node.js express?
Node.js是一种基于Chrome V8引擎的JavaScript运行环境,可以使JavaScript在服务器端运行。而Express是基于Node.js的一个Web框架,提供了一系列的API,使得开发Web应用变得更加容易。
1.2 node.js express的优点
- 快速:Express提供了许多优化过的方法和中间件,可以快速开发Web应用。
- 简单:Express提供了简单易用的API,开发者可以轻松地创建路由和处理HTTP请求。
- 灵活:Express提供了许多插件和中间件,可以轻松地扩展功能。
- 易学易用:对于有Node.js基础的开发者来说,学习和使用Express非常容易。
1.3 node.js express的应用场景
- RESTful API开发
- Web应用开发
- 博客网站开发
- 社交网站开发
- 实时应用开发等
二、环境搭建
2.1 安装node.js和npm
在开始使用Express之前,需要先安装Node.js和npm。Node.js可以从官网下载安装包,安装完成后,可以在命令行中输入以下命令来验证是否安装成功:
node -v
npm -v
2.2 安装express
安装完成Node.js和npm之后,可以使用npm安装Express。在命令行中输入以下命令来安装Express:
npm install express
2.3 创建第一个express应用
安装完成Express之后,可以创建一个简单的Express应用。在命令行中输入以下命令:
mkdir myapp
cd myapp
npm init
然后根据提示输入相关信息,创建一个package.json文件。
接着,在命令行中输入以下命令来安装Express:
npm install express --save
然后,在myapp目录下创建一个app.js文件,输入以下代码:
const express = require('express')
const app = express()
app.get('/', (req, res) => {
res.send('Hello World!')
})
app.listen(3000, () => {
console.log('启动成功!')
})
在命令行中输入以下命令启动应用:
node app.js
然后在浏览器中输入http://localhost:3000,就可以看到页面输出了Hello World!。
三、路由
3.1 什么是路由?
路由是指根据不同的URL,将不同的HTTP请求分配给不同的处理程序的过程。在Express中,路由是指将不同的URL映射到不同的处理程序上。
3.2 express路由的基本用法
在Express中,可以使用app.get()、app.post()、app.put()、app.delete()等方法来定义路由。例如:
app.get('/', (req, res) => {
res.send('Hello World!')
})
上面的代码定义了一个路由,当用户访问根路径时,会返回一个Hello World!的字符串。
3.3 动态路由
动态路由是指根据URL中的参数来处理请求的路由。在Express中,可以使用冒号(:)来定义动态路由参数。例如:
app.get('/users/:id', (req, res) => {
res.send(`User ID: ${req.params.id}`)
})
上面的代码定义了一个动态路由,当用户访问/users/123时,会返回一个User ID: 123的字符串。
3.4 路由中间件
路由中间件是指在处理路由之前或之后执行的一些代码。在Express中,可以使用app.use()方法来定义路由中间件。例如:
app.use((req, res, next) => {
console.log('时间:', Date.now())
next()
})
上面的代码定义了一个路由中间件,每次处理请求时,都会输出当前时间。
四、请求和响应
4.1 请求的属性和方法
在Express中,可以通过req对象来访问请求的属性和方法。例如:
- req.params:获取动态路由参数。
- req.query:获取查询参数。
- req.body:获取POST请求的请求体。
- req.cookies:获取请求中的Cookie。
- req.headers:获取请求头。
- req.method:获取请求方法。
- req.path:获取请求路径。
- req.url:获取请求URL。
4.2 响应的属性和方法
在Express中,可以通过res对象来访问响应的属性和方法。例如:
- res.send():发送响应数据。
- res.json():发送JSON格式的响应数据。
- res.render():渲染模板并发送响应数据。
- res.redirect():重定向到另一个URL。
- res.status():设置响应状态码。
- res.cookie():设置响应中的Cookie。
- res.header():设置响应头。
- res.download():下载文件。
4.3 错误处理
在Express中,可以使用try-catch语句来捕获错误。例如:
app.get('/users/:id', (req, res, next) => {
try {
const user = getUserById(req.params.id)
res.send(user)
} catch (err) {
next(err)
}
})
app.use((err, req, res, next) => {
console.error(err)
res.status(500).send('Internal Server Error')
})
上面的代码定义了一个路由,当用户访问/users/:id时,会根据ID获取用户信息。如果获取用户信息时发生错误,会将错误传递给错误处理中间件。
五、模板引擎
5.1 什么是模板引擎?
模板引擎是指将数据和模板结合起来,生成最终的HTML代码的工具。在Express中,可以使用各种模板引擎来渲染页面,如EJS、Pug、Handlebars等。
5.2 常见的模板引擎
- EJS:简单易用,语法类似于HTML。
- Pug:简洁优雅,语法类似于缩进的代码块。
- Handlebars:功能强大,语法类似于Mustache。
5.3 使用模板引擎渲染页面
在Express中,可以使用res.render()方法来渲染模板并发送响应数据。例如:
app.set('view engine', 'ejs')
app.get('/', (req, res) => {
res.render('index', { title: 'Express' })
})
上面的代码定义了一个路由,当用户访问根路径时,会渲染名为index的模板,并将title变量传递给模板。
六、静态文件
6.1 什么是静态文件?
静态文件是指不需要经过服务器处理,可以直接访问的文件,如HTML、CSS、JS、图片等。在Express中,可以使用express.static()方法来处理静态文件。
6.2 express处理静态文件的方法
在Express中,可以使用express.static()方法来处理静态文件。例如:
app.use(express.static('public'))
上面的代码定义了一个静态文件中间件,将public目录下的文件映射到根路径下。
6.3 静态文件缓存
在Express中,可以使用etag和Last-Modified等HTTP头来控制静态文件的缓存。例如:
app.use(express.static('public', {
etag: true,
lastModified: true,
cacheControl: true,
maxAge: 3600000
}))
上面的代码定义了一个静态文件中间件,并启用了etag、Last-Modified、Cache-Control等HTTP头来控制静态文件的缓存。
七、中间件
7.1 什么是中间件?
中间件是指在处理请求之前或之后执行的一些代码。在Express中,可以使用app.use()方法来定义中间件。
7.2 express中间件的基本用法
在Express中,可以使用app.use()方法来定义中间件。例如:
app.use((req, res, next) => {
console.log('时间:', Date.now())
next()
})
上面的代码定义了一个中间件,每次处理请求时,都会输出当前时间。
7.3 自定义中间件
在Express中,可以自定义中间件来实现各种功能。例如:
const myMiddleware = (req, res, next) => {
console.log('这是我的中间件!')
next()
}
app.use(myMiddleware)
上面的代码定义了一个自定义中间件,并将其应用到所有路由中。
八、数据库
8.1 连接数据库
在Express中,可以使用各种数据库来存储数据,如MySQL、MongoDB、Redis等。在使用数据库之前,需要先连接数据库。例如:
const mongoose = require('mongoose')
mongoose.connect('mongodb://localhost/myapp', {
useNewUrlParser: true,
useUnifiedTopology: true
})
上面的代码使用mongoose来连接MongoDB数据库。
8.2 数据库操作
在Express中,可以使用各种模块来操作数据库,如mongoose、sequelize等。例如:
const mongoose = require('mongoose')
const UserSchema = new mongoose.Schema({
name: String,
email: String,
password: String
})
const User = mongoose.model('User', UserSchema)
app.post('/users', (req, res) => {
const user = new User(req.body)
user.save()
.then(() => {
res.send('操作成功!')
})
.catch((err) => {
console.error(err)
res.status(500).send('服务器错误!')
})
})
上面的代码定义了一个路由,当用户提交POST请求时,会将请求体中的数据存储到MongoDB数据库中。
8.3 数据库连接池
在Express中,可以使用连接池来管理数据库连接,避免频繁地创建和销毁连接。例如:
const mysql = require('mysql')
const pool = mysql.createPool({
host: 'localhost',
user: 'root',
password: 'password',
database: 'myapp'
})
app.get('/users', (req, res) => {
pool.getConnection((err, connection) => {
if (err) {
console.error(err)
res.status(500).send('Internal Server Error')
return
}
connection.query('SELECT * FROM users', (err, results) => {
connection.release()
if (err) {
console.error(err)
res.status(500).send('Internal Server Error')
return
}
res.send(results)
})
})
})
上面的代码定义了一个路由,当用户访问/users时,会从连接池中获取一个连接,然后查询数据库中的用户数据,并将结果返回给客户端。
希望本文能够对您有所帮助,感谢您的阅读!
人人为我,我为人人,谢谢您的浏览,我们一起加油吧。
相关推荐
- 自学Python,写一个挨打的游戏代码来初识While循环
-
自学Python的第11天。旋转~跳跃~,我~闭着眼!学完循环,沐浴着while的光芒,闲来无事和同事一起扯皮,我说:“编程语言好神奇,一个小小的循环,竟然在生活中也可以找到原理和例子”,同事也...
- 常用的 Python 工具与资源,你知道几个?
-
最近几年你会发现,越来越多的人开始学习Python,工欲善其事必先利其器,今天纬软小编就跟大家分享一些常用的Python工具与资源,记得收藏哦!不然下次就找不到我了。1、PycharmPychar...
- 一张思维导图概括Python的基本语法, 一周的学习成果都在里面了
-
一周总结不知不觉已经自学Python一周的时间了,这一周,从认识Python到安装Python,再到基本语法和基本数据类型,对于小白的我来说无比艰辛的,充满坎坷。最主要的是每天学习时间有限。只...
- 三日速成python?打工人,小心钱包,别当韭菜
-
随着人工智能的热度越来越高,许多非计算机专业的同学们也都纷纷投入到学习编程的道路上来。而Python,作为一种相对比较容易上手的语言,也越来越受欢迎。网络上各类网课层出不穷,各式广告令人眼花缭乱。某些...
- Python自动化软件测试怎么学?路线和方法都在这里了
-
Python自动化测试是指使用Python编程语言和相关工具,对软件系统进行自动化测试的过程。学习Python自动化测试需要掌握以下技术:Python编程语言:学习Python自动化测试需要先掌握Py...
- Python从放弃到入门:公众号历史文章爬取为例谈快速学习技能
-
这篇文章不谈江流所专研的营销与运营,而聊一聊技能学习之路,聊一聊Python这门最简单的编程语言该如何学习,我完成的第一个Python项目,将任意公众号的所有历史文章导出成PDF电子书。或许我这个Py...
- 【黑客必会】python学习计划
-
阅读Python文档从Python官方网站上下载并阅读Python最新版本的文档(中文版),这是学习Python的最好方式。对于每个新概念和想法,请尝试运行一些代码片段,并检查生成的输出。这将帮助您更...
- 公布了!2025CDA考试安排
-
CDA数据分析师报考流程数据分析师是指在不同行业中专门从事行业数据搜集、整理、分析依据数据作出行业研究评估的专业人员CDA证书分为1-3级,中英文双证就业面广,含金量高!!?报考条件:满18...
- 一文搞懂全排列、组合、子集问题(经典回溯递归)
-
原创公众号:【bigsai】头条号:程序员bigsai前言Hello,大家好,我是bigsai,longtimenosee!在刷题和面试过程中,我们经常遇到一些排列组合类的问题,而全排列、组合...
- 「西法带你学算法」一次搞定前缀和
-
我花了几天时间,从力扣中精选了五道相同思想的题目,来帮助大家解套,如果觉得文章对你有用,记得点赞分享,让我看到你的认可,有动力继续做下去。467.环绕字符串中唯一的子字符串[1](中等)795.区...
- 平均数的5种方法,你用过几种方法?
-
平均数,看似很简单的东西,其实里面包含着很多学问。今天,分享5种经常会用到的平均数方法。1.算术平均法用到最多的莫过于算术平均法,考试平均分、平均工资等等,都是用到这个。=AVERAGE(B2:B11...
- 【干货收藏】如何最简单、通俗地理解决策树分类算法?
-
决策树(Decisiontree)是基于已知各种情况(特征取值)的基础上,通过构建树型决策结构来进行分析的一种方式,是常用的有监督的分类算法。决策树算法是机器学习中的一种经典算法,它通过一系列的规则...
- 面试必备:回溯算法详解
-
我们刷leetcode的时候,经常会遇到回溯算法类型题目。回溯算法是五大基本算法之一,一般大厂也喜欢问。今天跟大家一起来学习回溯算法的套路,文章如果有不正确的地方,欢迎大家指出哈,感谢感谢~什么是回溯...
- 「机器学习」决策树——ID3、C4.5、CART(非常详细)
-
决策树是一个非常常见并且优秀的机器学习算法,它易于理解、可解释性强,其可作为分类算法,也可用于回归模型。本文将分三篇介绍决策树,第一篇介绍基本树(包括ID3、C4.5、CART),第二篇介绍Ran...
- 大话AI算法: 决策树
-
所谓的决策树算法,通俗的说就是建立一个树形的结构,通过这个结构去一层一层的筛选判断问题是否好坏的算法。比如判断一个西瓜是否好瓜,有20条西瓜的样本提供给你,让你根据这20条(通过机器学习)建立起...
- 一周热门
- 最近发表
- 标签列表
-
- kubectlsetimage (56)
- mysqlinsertoverwrite (53)
- addcolumn (54)
- helmpackage (54)
- varchar最长多少 (61)
- 类型断言 (53)
- protoc安装 (56)
- jdk20安装教程 (60)
- rpm2cpio (52)
- 控制台打印 (63)
- 401unauthorized (51)
- vuexstore (68)
- druiddatasource (60)
- 企业微信开发文档 (51)
- rendertexture (51)
- speedphp (52)
- gitcommit-am (68)
- bashecho (64)
- str_to_date函数 (58)
- yum下载包及依赖到本地 (72)
- jstree中文api文档 (59)
- mvnw文件 (58)
- rancher安装 (63)
- nginx开机自启 (53)
- .netcore教程 (53)