Node.js 开始
新建项目
初始化package.json
文件
1 | npm init -y |
安装开发环境所需包
1 | npm install 包名 --save |
node.js
声明常量
1 | const NAME = value; |
引包
1 | const packageName = require('packageName') |
Express
Express 介绍
基于 Node.js 平台,快速、开放、极简的 Web 开发框架
安装
1 | npm install express --save |
使用
1 | const express = require("express"); |
该应用程序启动服务器,并在端口3000上侦听连接。该应用会以“ Hello World!”响应,以请求根 URL(/
)或route。对于其他所有路径,它将以404 Not Found响应。
express 使用 post 方法
express 有 get、post 和在路由后面跟参数,这三种接参方式,这篇文章我主要记录 post 使用方法
- 安装 express 中间件(body-parser)
1 | cnpm install body-parser -D |
- 在 app.js 里面引入并添加解析
1 | var bodyParser = require("body-parser"); /*post方法*/ |
- 使用 post 请求
1 | $.post('/admin/login', data, function (res) { |
- js 文件接受 post 数据
1 | var express = require('express'); |
路由
router
目的是中间件和路由的分离的实例。您可以将其视为“微型应用程序”,仅能够执行中间件和路由功能。每个 Express 应用程序都有一个内置的应用路由。
路由的行为类似于中间件本身,因此您可以将其用作 app.use()的参数或用作另一台路由的 use()方法的参数。
顶级express
对象具有一个创建新对象的Router()方法router
。
一旦你创建了一个路由的对象,你可以添加中间件和 HTTP 方法路由(如get
,put
,post
,等),以它就像一个应用程序。例如:
1 | // 为传递到此路由的任何请求调用该方法 |
然后,您可以将路由用于特定的根 URL,以这种方式将路由分为文件或是微型应用程序。
1 | // 仅对/ calendar / *的请求将发送到您的“路由” |
模板
安装
1 | npm install --save art-template |
使用
1 | var express = require("express"); |
利用 Express 托管静态文件
为了提供诸如图像、CSS 文件和 JavaScript 文件之类的静态文件,请使用 Express 中的 express.static
内置中间件函数。
此函数特征如下:
1 | express.static(root, [options]); |
该root
参数指定要从其提供静态资产的根目录。有关自options
变量的更多信息,请参见express.static。
例如,通过如下代码就可以将 public
目录下的图片、CSS 文件、JavaScript 文件对外开放访问了:
1 | app.use(express.static("public")); |
现在,你就可以访问 public
目录中的所有文件了:
1 | http://localhost:3000/images/kitten.jpg |
Express 在静态目录查找文件,因此,存放静态文件的目录名不会出现在 URL 中。
如果要使用多个静态资源目录,请多次调用 express.static
中间件函数:
1 | app.use(express.static("public")); |
访问静态资源文件时,express.static
中间件函数会根据目录的添加顺序查找所需的文件。
注意:为了获得最佳结果,请使用反向代理缓存来提高服务静态资产的性能。
要为该express.static
功能所服务的文件创建虚拟路径前缀(文件系统中实际上不存在该路径),请为静态目录指定安装路径,如下所示:
1 | app.use("/static", express.static("public")); |
现在,你就可以通过带有 /static
前缀地址来访问 public
目录中的文件了。
1 | http://localhost:3000/static/images/kitten.jpg |
然而,但是,您提供给express.static
函数的路径是相对于您启动node
过程的目录的。如果从另一个目录运行 express app,则使用要提供服务的目录的绝对路径更为安全:
1 | app.use("/static", express.static(path.join(__dirname, "public"))); |
欲了解更多关于 serve-static
函数及其参数的知识,请参考 serve-static.
Express 常见问题及解答
如何组织我的应用程序?
这个问题没有明确的答案。答案取决于您的应用程序规模和所涉及的团队。为了尽可能灵活,Express 不对结构进行任何假设。
路由和其他特定于应用程序的逻辑可以根据需要存储在任意目录结构中的任意数量的文件中。查看以下示例以获取灵感:
此外,还有 Express 的第三方扩展,可以简化其中的一些模式:
如何定义模型(model)?
Express 没有数据库的概念。该概念由第三方节点模块决定,使您可以与几乎所有数据库进行接口。
有关以模型为中心的基于 Express 的框架,请参见LoopBack。
如何验证用户?
身份验证是 Express 不会涉足的另一个有争议的领域。您可以使用所需的任何身份验证方案。有关简单的用户名/密码方案,请参见以下示例。
Express 支持哪些模板引擎?
Express 支持任何符合(path, locals, callback)
签名的模板引擎。要规范化模板引擎接口和缓存,请参阅 consolidate.js 项目以获得支持。未列出的模板引擎可能仍支持 Express 签名。
有关更多信息,请参阅将模板引擎与 Express 结合使用。
如何处理 404 响应?
在 Express 中,404 响应不是错误的结果,因此错误处理程序中间件将不会捕获它们。此行为是因为 404 响应只是表明没有其他工作要做;换句话说,Express 已执行了所有中间件功能和路由,但发现它们均未响应。您需要做的就是在堆栈的最底部添加一个中间件功能(在所有其他功能下方)以处理 404 响应:
1 | app.use(function (req, res, next) { |
如何设置一个错误处理器?
错误处理器中间件的定义和其他中间件一样,唯一的区别是 4 个而不是 3 个参数,即 (err, req, res, next)
:
1 | app.use(function (err, req, res, next) { |
请参考 错误处理 章节以了解更多信息。
如何渲染纯 HTML 文件?
不需要!无需通过 res.render()
渲染 HTML。 你可以通过 res.sendFile()
直接对外输出 HTML 文件。 如果你需要对外提供的资源文件很多,可以使用 express.static()
中间件。
Express 应用程序生成器
通过应用生成器工具 express-generator
可以快速创建一个应用的骨架。
express-generator
包含了 express
命令行工具。通过如下命令即可安装:
1 | npm install express-generator -g |
-h
参数可以列出所有可用的命令行参数:
1 | express -h |
例如,如下命令创建了一个名称为 myapp 的 Express 应用。此应用将在当前目录下的 myapp 目录中创建,并且设置为使用 Pug 模板引擎(view engine):
1 | express --view=pug myapp |
然后安装所有依赖包:
1 | cd myapp |
在 MacOS 或 Linux 中,通过如下命令启动此应用:
1 | $ DEBUG=myapp:* npm start |
在 Windows 中,通过如下命令启动此应用:
1 | set DEBUG=myapp:* & npm start |
然后在浏览器中打开 http://localhost:3000/
网址就可以看到这个应用了。
通过生成器创建的应用一般都有如下目录结构:
1 | . |