编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

node.js express 从零开始简单说一说

wxchong 2024-10-22 17:54:47 开源技术 6 ℃ 0 评论

一、介绍

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时,会从连接池中获取一个连接,然后查询数据库中的用户数据,并将结果返回给客户端。


希望本文能够对您有所帮助,感谢您的阅读!

人人为我,我为人人,谢谢您的浏览,我们一起加油吧。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表