Skip to content
快速预览

express-generator

✍️ w 🕒 2023-06-08 06:48:22(a year ago) 🔗 B.NodeJS学习 服务端 express

关于 express generator, 是一个官方提供的 Express 应用程序生成器,可以快速创建一个基本的 Express 应用程序骨架。它提供了一些预设的目录结构、文件和代码,可以帮助开发者快速搭建一个 Express 应用程序,并且可以选择使用不同的模板引擎。

使用 Express Generator 可以大大提高开发效率,避免了从头开始创建一个 Express 应用程序的繁琐过程。以下是使用 Express Generator 创建一个

使用

shell
npx express-generator --view=ejs

生成的目录

使用 express 生成器生成的目录如下

├── bin
│   └── www
├── public
│   ├── images
│   ├── javascripts
│   └── stylesheets
│       └── style.css
├── routes
│   ├── index.js
│   └── users.js
├── views
│   ├── error.ejs
│   ├── index.ejs
│   └── layout.ejs
├── app.js
├── package.json
└── README.md
  • app.js:Express 应用程序的入口文件,用于配置和启动应用程序。
  • bin/www:负责启动服务器的可执行文件。
  • package.json:用于描述项目及其依赖项的元数据文件。
  • public:存放静态文件的目录,包括图片、样式表和 JavaScript 文件。
    • images:存放图片文件的目录。
    • javascripts:存放浏览器端 JavaScript 文件的目录。
    • stylesheets:存放样式表文件的目录。
  • routes:存放路由文件的目录,包括应用程序中的所有路由映射。
    • index.js:处理应用程序的根路径。
    • users.js:处理用户相关路径。
  • views:存放 Express 视图文件的目录,用于呈现页面给用户。
    • error.ejs:展示错误信息的视图文件。
    • index.ejs:应用程序的主页视图文件。

生成的app.js 带来的知识点

通过生成的 app.js 文件来看带来的知识点

中间件上:

  • http-errors 是一个用于创建 HTTP 错误的 Node.js 模块。使用 http-errors 可以方便地自定义错误消息和错误状态码。http-errors生成的error继承Error,所以可以通过error.message error.name error.stack分别获得错误的信息,名称,还有栈。同时它还多了一个error.status,该字段是http状态码

  • cookie-parser 是一个用于解析 cookie 的 Node.js 模块。Express 应用程序中,可以使用 cookie-parser 模块来访问和解析 cookie。

  • morgan 是一个 HTTP 请求日志中间件,用于记录应用程序的 HTTP 请求日志。在 Express 应用程序中,morgan 通常会添加到中间件堆栈中,以捕获和记录 HTTP 请求日志。中间件会将日志信息输出到控制台,也可以通过配置将日志输出到指定的文件中,通过查看文件或使用日志管理软件(如 Logstash 或 Splunk)来查看日志。您还可以使用 morgan 中间件提供的其他选项和方法来自定义日志的格式和输出方式

  • express.json() 和 express.urlencoded 在之前我们提到处理时候使用的是 body-parser ,因为在以前的版本中,为了解析请求体数据,Express 需要依赖于第三方模块 body-parser。但在 Express 4.x 版本以后,中间件函数 express.json()express.urlencoded() 被添加到了 Express 的核心中,因此不再需要安装和引入 body-parser 模块了,这会将解析后的请求体数据绑定到 req.body 对象中

关于 express.urlencoded() 处理的数据格式

express.urlencoded({ extended: false }) 方法解析的格式是 x-www-form-urlencoded,即 application/x-www-form-urlencoded 格式。这种格式是常用的 HTTP POST 请求数据提交方式,会将 HTTP 请求参数编码为键值对并以多个名称/值对以 & 符号分隔。例如,以下是一个请求数据字符串的示例:

name=John%20Doe&age=25

这个字符串对应着两个请求参数:nameage,它们分别对应着键值对 name=John%20Doeage=25。在服务器端,express.urlencoded({ extended: false }) 方法可以将这种格式的请求数据解析为一个 JavaScript 对象,以便我们在后续的处理中使用。

当将 extended 参数设置为 true 时,express.urlencoded() 方法可以解析更多的请求数据格式。具体来说,它可以处理具有嵌套结构的对象、数组、布尔值和其他复杂的数据类型。例如,如果我们使用以下方式提交的表单数据:

html
<form action="/" method="POST">
  <input type="text" name="user[name]" value="John Doe">
  <input type="text" name="user[age]" value="30">
  <input type="checkbox" name="product[]" value="product1" checked>
  <input type="checkbox" name="product[]" value="product2">
  <input type="radio" name="gender" value="male">
  <input type="radio" name="gender" value="female" checked>
  <input type="submit">
</form>

则使用 extended: true 选项解析后得到的数据格式为:

{ user: { name: 'John Doe', age: '30' }, product: ['product1'], gender: 'female' } 从上面的例子可以看出,extended: true 选项可以让我们更方便地处理复杂的表单数据。

其他

  • res.locals 在 Express 应用程序中,可以把一些变量存放在 res.locals 对象中,这些变量会被当做本地变量传递给渲染视图的模板引擎这也就是为什么没传递对象数据也能在页面被解析了
js
var createError = require('http-errors') // 引入http-errors模块,用于创建http错误。
var express = require('express') // 引入express框架
var path = require('path') // 引入nodejs内置模块path,用于处理文件路径相关操作
var cookieParser = require('cookie-parser') // 引入cookie-parser模块,用于解析cookie
var logger = require('morgan') // 引入morgan模块,用于输出日志

var indexRouter = require('./routes/index') // 引入index.js文件
var usersRouter = require('./routes/users') // 引入users.js文件

var app = express() // 创建app应用

// view engine setup
app.set('views', path.join(__dirname, 'views')) // 设置views文件夹路径
app.set('view engine', 'ejs') // 设置使用ejs模板引擎

app.use(logger('dev')) // 使用morgan输出日志,dev模式输出颜色有区分
app.use(express.json()) // 解析json格式的请求体
app.use(express.urlencoded({ extended: false })) // 解析urlencoded格式的请求体,extended为false表示值可以是字符串或数组形式,true表示可以包含任何数据类型。
app.use(cookieParser()) // 解析cookie
app.use(express.static(path.join(__dirname, 'public'))) // 静态文件目录,用于存放css、js、images文件等

app.use('/', indexRouter) // 处理应用程序的根路径请求
app.use('/users', usersRouter) // 处理应用程序的/users路径请求

// 请求没有被前面的任何一个中间件或处理器匹配到,它就会被这段代码所捕获,然后进入错误处理流程。因此可以处理404错误。
app.use(function (req, res, next) {
	// 此时next 是由参数的因此 将会跳过所有的中间件和路由,直接进入错误处理流程。将进入错误中间
	next(createError(404)) // 捕获404错误并转发到错误处理程序
})

// 我是错误中间件
app.use(function (err, req, res, next) {
	// 在 Express 应用程序中,可以把一些变量存放在 res.locals 对象中,这些变量会被当做本地变量传递给渲染视图的模板引擎
	res.locals.message = err.message // 设置res.locals.message为错误信息
	res.locals.error = req.app.get('env') === 'development' ? err : {} // 设置res.locals.error为错误对象(仅在开发环境下)

	// render the error page
	res.status(err.status || 500) // 设置状态码为错误对象的状态码或500(服务器内部错误)
	res.render('error') // 渲染错误页
})

module.exports = app // 导出app对象

Express Generator 生成bin/www 文件作用 ??

需要后续了解

Released under the MIT License.