nodejs express路由匹配控制及Router模块化使用详解

针对“nodejs express路由匹配控制及Router模块化使用详解”的完整攻略,我会分为以下几个方面进行详细说明:

  1. 路由匹配控制
  2. Router模块化使用
  3. 示例说明

1. 路由匹配控制

在Node.js的Express框架中,路由控制是指将请求映射到指定的路由处理函数(controller)上。

主要通过app对象的路由apr()方法将处理方法与路由匹配。

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

上述代码表示当访问网站根目录时,返回'Hello World!'

除了app.get()方法还有其他的请求方法,如app.post()、app.delete()、app.put()等。

在上述例子中,'/'是路由路径,(req, res) => {...}是路由处理函数。

路由路径可以是字符串、字符串模式、正则表达式,例如:

app.get('/about', (req, res) => {
  res.send('About Page')
})

app.get('/users/:id', (req, res) => {
  const id = req.params.id
  res.send(`User ${id}`)
})

app.get(/.*fly$/, (req, res) => {
  res.send('I am a butterfly')
})

2. Router模块化使用

在Express中,Route是指将相同前缀的路由放在一个Route对象下,来增加代码的可读性和维护性。在Route对象中,可以设置路由路径和路由处理函数。

要使用Route,需要通过Express.Router()创建一个Router实例,然后通过app.use()将路由器分配到特定路径上。

const express = require('express')
const app = express()
const router = express.Router()

router.get('/', (req, res) => {
  res.send('Home Page')
})

router.get('/about', (req, res) => {
  res.send('About Page')
})

router.get('/contact', (req, res) => {
  res.send('Contact Page')
})

app.use('/pages', router)

app.listen(3000, () => console.log('Server running on port 3000))

上述例子表示:

  • 创建了一个包含三个路由的Router实例,路由包含:'/'、'/about'、'/contact'
  • 通过app.use('/pages', router),将路由器分配到'/pages'路径下
  • 所有的'/pages'路由都指向Router实例

3. 示例说明

接下来,我通过两个示例来详细讲解一下路由匹配控制和Router模块化使用。

示例一

实现一个简单的博客系统,包含以下功能:

  • 首页(/):显示所有博客文章的列表
  • 博客文章详情页(/posts/:postId):显示对应postId的博客文章详情
  • 发布新博客(/posts/new):渲染一个包含表单的页面,用户可以填写博客文章的内容
  • 提交新博客(/posts):接收表单提交的数据,将博客文章保存在数据库中

首先,我们需要安装一些需要用到的依赖:

npm install express --save
npm install body-parser --save
npm install pug --save
npm install mongoose --save

接下来,创建一个文件夹,命名为blog,并在其中创建以下文件:

app.js // express 主文件
controllers // 注册控制器
  |-- post.js
  |-- home.js
middleware // 中间件
models // 注册数据库模型
routes // 注册路由
views // 视图
  |-- home.pug
  |-- post.pug
  |-- new_post.pug

app.js主文件内容如下:

const express = require('express')
const bodyParser = require('body-parser')
const mongoose = require('mongoose')

const app = express()

mongoose.Promise = global.Promise
mongoose.connect('mongodb://localhost:27017/blog', {
  useNewUrlParser: true,
  useUnifiedTopology: true
})

app.set('views', './views')
app.set('view engine', 'pug')

app.use(bodyParser.json())
app.use(bodyParser.urlencoded({extended: true}))

app.use('/', require('./routes/home'))
app.use('/posts', require('./routes/post'))

app.listen(3000, () => {
  console.log('Server is running at http://localhost:3000')
})

home.js路由控制器内容如下:

const express = require('express')
const router = express.Router()
const Post = require('../models/post')

router.get('/', async (req, res) => {
  const posts = await Post.find().exec();
  res.render('home', {title: 'Home - Blog', posts: posts})
})

module.exports = router

post.js路由控制器内容如下:

const express = require('express')
const router = express.Router()
const Post = require('../models/post')

router.get('/:id', async (req, res) => {
  const post = await Post.findById(req.params.id).exec()
  res.render('post', {title: 'Post - Blog', post: post})
})

router.get('/new', (req, res) => {
  res.render('new_post', {title: 'New Post - Blog'})
})

router.post('/', async (req, res) => {
  const post = new Post({
    title: req.body.title,
    content: req.body.content
  })

  await post.save()

  res.redirect('/')
})

module.exports = router

home.pug内容如下:

html
  head
    title= title
  body
    h1= title
    a(href="/posts/new") Add New Post
    ul
      each post in posts
        li
          a(href="/posts/#{post.id}") #{post.title}

post.pug内容如下:

html
  head
    title= title
  body
    h1= post.title
    p= post.content

new_post.pug内容如下:

html
  head
    title= title
  body
    h1 New Post
    form(method='POST', action='/posts')
      label Title
      br
      input(type='text', name='title', required)
      br
      label Content
      br
      textarea(name='content', required)
      br
      button(type='submit') Create Post

示例二

实现一个基于Router模块化开发的REST API,包含以下功能:

  • 获取用户列表:GET /api/v1/users
  • 获取指定用户信息:GET /api/v1/users/:id
  • 创建新用户:POST /api/v1/users
  • 更新指定用户信息:PUT /api/v1/users/:id
  • 删除指定用户:DELETE /api/v1/users/:id

首先,我们需要安装一些需要用到的依赖:

npm install express --save
npm install body-parser --save

接下来,创建一个文件,命名为index.js,主要内容如下:

const express = require('express')
const bodyParser = require('body-parser')
const app = express()

app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: true }))

const usersRouter = require('./routes/users');
app.use('/api/v1/users', usersRouter);

app.listen(3000, () => console.log('App is running at http://localhost:3000'))

接下来,再创建一个文件夹,命名为routes,并在其中创建一个文件users.js,主要内容如下:

const express = require('express');
const router = express.Router();

const users = [
  {id:1, name: 'Tom', age: 18},
  {id:2, name: 'Jerry', age: 20},
  {id:3, name: 'Bob', age: 22}
]

router.get('/', (req, res) => {
  res.json(users)
})

router.get('/:id', (req, res) => {
  const id = Number(req.params.id);
  const user = users.find(user => user.id === id);

  if (user) {
    res.json(user)
  } else {
    res.status(404).json({ message: `User ${id} not found` });
  }
})

router.post('/', (req, res) => {
  const { name, age } = req.body;
  const newUserId = users.length + 1;
  const newUser = { id: newUserId, name, age };
  users.push(newUser);
  res.status(201).json(newUser)
})

router.put('/:id', (req, res) => {
  const id = Number(req.params.id);
  const user = users.find(user => user.id === id);

  if (user) {
    user.name = req.body.name;
    user.age = req.body.age;
    res.json(user);
  } else {
    res.status(404).json({ message: `User ${id} not found` });
  }
})

router.delete('/:id', (req, res) => {
  const id = Number(req.params.id);
  const userIndex = users.findIndex(user => user.id === id);

  if (userIndex !== -1) {
    users.splice(userIndex, 1);
    res.status(204).end();
  } else {
    res.status(404).json({ message: `User ${id} not found` });
  }
})

module.exports = router;

总结

通过本文的介绍,希望你能够了解完整的“nodejs express路由匹配控制及Router模块化使用详解”的攻略,掌握路由匹配控制和Router模块化使用的基本原理和实际应用。对于以上两个示例,你可以通过命令行运行,然后访问相应的路径体验一下。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:nodejs express路由匹配控制及Router模块化使用详解 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • nodejs实现的一个简单聊天室功能分享

    下面我将详细讲解“nodejs实现的一个简单聊天室功能分享”的完整攻略: 简介 本文主要介绍如何使用Node.js实现一个简单的聊天室功能,在此过程中,将用到Node.js、WebSocket、Express和Bootstrap等工具和框架。 步骤 1. 创建项目并安装依赖 首先,创建一个新的项目并进入项目目录,执行以下命令: mkdir chat-room…

    node js 2023年6月8日
    00
  • 微信小程序反编译的实现

    下面我将详细讲解“微信小程序反编译的实现”的完整攻略。 1.概述 微信小程序反编译指的是将已经编译好的小程序代码反转为可读的源代码的过程。在这个过程中,可以获取小程序的完整源代码以及关键算法和模块等重要信息,对于开发者来说,这是一个非常有用的技能。 微信小程序反编译的实现过程中,需要用到一些工具和技术,包括反编译工具和相关构建环境的配置等。下面具体介绍微信小…

    node js 2023年6月9日
    00
  • Angular8升级至Angular13遇到的问题解决

    以下是“Angular8升级至Angular13遇到的问题解决”的完整攻略。 背景 Angular是目前应用非常广泛的前端MVC框架之一。由于Angular版本更新较快,升级过程中会涉及到一定的风险,因此在升级之前需要仔细阅读相关的文档,避免不必要的麻烦。 升级步骤 步骤一:备份项目和依赖 在升级之前,需要备份项目和依赖。稍有不慎就会导致大量的工作和时间被浪…

    node js 2023年6月9日
    00
  • node版本管理工具n包使用教程详解

    Node版本管理工具n包使用教程详解 简介 Node.js是一个基于Chrome V8引擎的JavaScript应用程序运行环境。然而,在使用Node.js开发过程中,需要经常切换不同的Node.js版本。 n是一款用于管理Node.js版本的工具。 安装 安装n 在终端输入以下命令进行安装: npm install -g n 安装指定版本的Node.js …

    node js 2023年6月8日
    00
  • Lua协同程序coroutine的简介及优缺点

    Lua中的协同程序coroutine是一种特殊的线程,它允许您在相同进程中的不同代码段之间切换执行。与操作系统线程相比,coroutine更加轻量级,且由于没有线程间的切换和锁竞争开销,所以使用coroutine可以有效提高性能。 如何创建一个coroutine 在Lua中,使用函数coroutine.create()可以创建一个coroutine对象,例如…

    node js 2023年6月8日
    00
  • vue组件引用另一个组件出现组件不显示的问题及解决

    当使用Vue.js开发单页应用程序时,我们常常需要在一个组件中引用另一个组件。但在实际开发过程中,我们可能会遇到以下问题: 当一个组件引用另一个组件时,第二个组件可能会出现不可见的情况,导致无法正常渲染。这是因为Vue.js组件内部默认会生成一个标签,而这个标签是隐式的,有时候无法正确渲染。 下面是两个示例说明: 示例 1: 下面是组件A代码: <te…

    node js 2023年6月8日
    00
  • 详解node.js创建一个web服务器(Server)的详细步骤

    以下是详解node.js创建一个web服务器(Server)的详细步骤: 安装node.js首先,我们需要安装node.js。你可以去官网(https://nodejs.org/)下载安装包,然后按照指示安装即可。 创建项目目录在你的电脑上创建一个文件夹,作为这个项目的根目录。在这个文件夹中,我们需要创建以下两个文件: package.json,它是一个No…

    node js 2023年6月8日
    00
  • 详解node nvm进行node多版本管理

    详解node nvm进行node多版本管理 什么是nvm? nvm(Node Version Manager)是一款用于管理node.js多版本的工具,可以在同一台机器上安装并切换不同的Node.js版本。nvm 安装完成后,可以通过命令行方便地选择需要使用的 Node.js 版本。 NVM的安装 NVM的安装非常简单,只需要在命令行中输入以下命令即可。 c…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部