Express.js 是 Node.js 环境下最流行的 Web 应用程序框架之一,其模块化和可插拔的结构使得其很容易实现 RESTful API。在本文中,我们将讨论如何在 Express.js 中实现多用户的 RESTful API。
需求分析
在实现多用户的 RESTful API 之前,我们需要确定具体的需求。在本例中,我们需要实现以下功能:
- 注册用户
- 用户登录
- 认证用户
- 实现 API 的 CRUD 操作
基于以上需求,我们需要实现以下 API:
- POST /users:注册用户
- POST /users/login:用户登录
- GET /users/me:认证用户
- POST /api:创建资源
- GET /api/:id:获取资源
- PATCH /api/:id:更新资源
- DELETE /api/:id:删除资源
实现方法
- 创建应用程序
在创建应用程序之前,我们需要安装一些必须的依赖:
npm install express body-parser jsonwebtoken bcryptjs mongoose passport passport-jwt
其中,express
是 Express.js 应用程序框架,body-parser
是用于解析请求体的中间件,jsonwebtoken
是用于生成和解码用户令牌的库,bcryptjs
是用于密码哈希和比较的库,mongoose
是 MongoDB 的对象文档映射(ODM)库,passport
和 passport-jwt
用于处理用户身份验证和 JSON Web Token。
在安装了必须的依赖之后,我们可以创建我们的应用程序。
-- -------------------- ---- ------- ----- ------- - ------------------- ----- -------- - -------------------- ----- ---------- - ----------------------- ----- -------- - -------------------- ----- --- - ---------- -- ---- ----- ---- - ------------------------- -- -------- ------------------------------- --------- ----- ---- --------------------------- -- -- ------- -------- ----------------------- - ---------------- ----- ------------------- ---- -- -------- -- -------------------- ------------ ---------- -- ------------------ -- -------- --- ------------------------------- --------------------------------------- -- -- -------- -- -- -- ----------------- --------------------------- -- ---- --------------- ------------------------- -- --- -- -- --------- ----- ---- - ---------------- -- ----- -- ----- ---------------- -- -- ------------------- ------- -- ---- -----------展开代码
在这个应用程序中,我们首先引入必要的依赖和配置,然后初始化 MongoDB 和 Passport.js。最后,我们引入用户和 API 的路由。
- 用户模型
在我们实现用户接口之前,我们需要先创建一个用户模型。
-- -------------------- ---- ------- ----- -------- - -------------------- ----- ------ - ---------------- -- ------ ----- ---------- - --- -------- ----- - ----- ------- --------- ---- -- ------ - ----- ------- --------- ---- -- --------- - ----- ------- --------- ---- -- ----- - ----- ----- -------- -------- - --- -------------- - ---------------------- ------------展开代码
在这个模型中,我们定义了用户的名字,电子邮件地址,密码和创建日期。对于密码,我们将使用 bcryptjs 库对其进行哈希。
- 用户注册和登录
接下来,我们将实现用户注册和登录接口。
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ------ - ----------------- ----- ------ - -------------------- ----- --- - ------------------------ ----- -------- - -------------------- -- ---- ----- --------------------- - ---------------------------------- ----- ------------------ - ------------------------------- -- ------ ----- ---- - -------------------------- -- ---- ------------------------ ----- ---- -- - -- -------- ----- - ------- ------- - - -------------------------------- -- ---------- - ------ ----------------------------- - -- ---------- -------------- ------ -------------- ------------ -- - -- ------ - ------------ - --------- ------ ----------------------------- - ---- - ----- ------- - --- ------ ----- -------------- ------ --------------- --------- ----------------- --- -- ---- ------------------ ----- ----- -- - ----------------------------- ----- ----- ----- -- - -- ----- ----- ---- ---------------- - ----- ------- ------- ---------- -- --------------- ---------- -- ------------------ --- --- - --- --- -- ---- --------------------- ----- ---- -- - -- -------- ----- - ------- ------- - - ----------------------------- -- ---------- - ------ ----------------------------- - ----- ----- - --------------- ----- -------- - ------------------ -- ---- -------------- ----- ------------ -- - -- ------- - ------------ - -------- ------ ----------------------------- - ------------------------ --------------------------- -- - -- --------- - ----- ------- - - --- -------- ----- --------- -- -- ---- --------- -------- ----------------- - ---------- ---- -- ----- ------ -- - ---------- -------- ----- ------ ------- - - ----- --- - -- - ---- - --------------- - -------- ------ ----------------------------- - --- --- --- -- -------- ----------- ------ ---------------------------- - -------- ----- --- ----- ---- -- - ---------- --- ------------ ----- -------------- ------ -------------- --- - -- -------------- - -------展开代码
在这个路由中,我们引入了用户模型,验证注册和登录信息的中间件,以及生成 JSON Web Token 的库。在用户注册接口中,我们首先验证用户输入是否合法,然后检查是否存在同名用户。如果不存在同名用户,则将用户的密码哈希并保存到数据库中。在用户登录接口中,我们验证用户输入是否合法,然后在数据库中查找用户。如果用户存在,我们将检查输入的密码是否与数据库中的哈希匹配。如果匹配,我们将生成一个 JSON Web Token 并返回给客户端。
- API 模型
现在,我们将在数据库中创建一个名为 Api
的模型,用于表示我们的 API。
-- -------------------- ---- ------- ----- -------- - -------------------- ----- ------ - ---------------- -- -- --- -- ----- --------- - --- -------- ------ - ----- ------- --------- ---- -- ------------ ------- ------- - ----- ---------------------- ---- ------ -- ----- - ----- ----- -------- -------- - --- -------------- - --------------------- -----------展开代码
在这个模型中,我们定义了标题、描述、作者和创建日期。
- API 接口
最后,我们将实现用于管理 API 的接口。
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ------ - ----------------- ----- -------- - -------------------- -- -- --- -- ----- --- - ------------------------- -- ---- --- --------------- ----- ---- -- - ----------------------------- -------- ------------------- -- - --------------- ------------ -- ------------------ --- -- ---- --- ------------------ ----- ---- -- - ---------------------------------------------- -------- ------------------ -- - -- ------ - ------ ---------------------- ---- ---- --- ------ --- - -------------- ------------ -- ------------------ --- -- -- --- ---------------- ---------------------------- - -------- ----- --- ----- ---- -- - ----- ------ - --- ----- ------ --------------- ------------ --------------------- ------- ----------- --- ---------------------- -- - -------------- ------------ -- ------------------ --- -- -- --- -------------------- ---------------------------- - -------- ----- --- ----- ---- -- - ------------------------------------ -- - -- ------ - ------ ---------------------- ---- ---- --- ------ --- - -- ---------------------- --- ------------ - ------ ---------------------- ---- ---- ----------- --- - --------- - -------------- -- ---------- --------------- - -------------------- -- ---------------- ------------------- -- - -------------- ------------ -- ------------------ ------------ -- ------------------ --- -- -- --- --------------------- ---------------------------- - -------- ----- --- ----- ---- -- - ------------------------------------ -- - -- ------ - ------ ---------------------- ---- ---- --- ------ --- - -- ---------------------- --- ------------ - ------ ---------------------- ---- ---- ----------- --- - -------------------- -- - ---------- ---- ---- -------- --- ------------ -- ------------------ ------------ -- ------------------ --- -------------- - -------展开代码
在这个路由中,我们首先引入 API 模型和 Passport.js。在获取所有 API 接口中,我们使用 populate()
方法将 API 的作者信息展开。在创建 API 接口中,我们使用 passport.authenticate()
中间件验证用户是否已经登录。在更新和删除 API 接口中,我们还检查请求的用户是否是 API 的作者。
这样,我们就完成了在 Express.js 中实现多用户的 RESTful API 的过程。本例中的代码可以作为示例,帮助你快速入门 Express.js。同时,我们也希望本文对你在实现多用户的 RESTful API 中有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6780cf28ce7f4861254a5fe0