FullStackOpen: Test Node.js app with Jest

教程:FullStackOpen2022/Part 4 软件开发的一个重要环节,就是自动化测试。 本文中以 bloglist 应用为例。对应练习 4.3-4.14。 1. 配置测试环境 通常的做法是为开发和测试定义不同的模式。而 Node 中是用 NODE_ENV 环境变量定义应用的执行模式。 在脚本中指定应用模式的方式不能在 Windows 上工作,这可以通过安装 cross-env 作为一个开发依赖包来修复。另外,如果应用是部署在 Heroku上,cross-env 作为开发依赖项可能在 web 服务器上报错,可以将 cross-env 保存为生产依赖修复这个错误。 npm install --save-dev cross-env npm i cross-env -P 通过在 package.json 中定义 npm 脚本使用跨平台兼容性的 cross-env 库来配置环境: "scripts": { "start": "cross-env NODE_ENV=production node index.js", "dev": "cross-env NODE_ENV=development nodemon index.js", "test": "cross-env NODE_ENV=test jest --verbose --runInBand" }, 对定义应用配置的模块 config.js 进行一些修改: require('dotenv').config() const PORT = process.env.PORT; const MONGODB_URI = process....

2022-04-18 · 5 min

FullStackOpen: Node project structure

教程:FullStackOpen2022/Part 4 优化应用结构 对于较小的应用,结构并不重要。可一旦应用开始增大,就必须建立某种结构,并将应用的不同职责分离到单独的模块中,使开发应用更加容易。 优化后的目录结构: ├── index.js ├── app.js ├── build │ └── ... ├── controllers │ └── blogs.js ├── models │ └── blog.js ├── package-lock.json ├── package.json ├── utils │ ├── config.js │ ├── logger.js │ └── middleware.js index.js:用于启动应用。 app.js:实际的应用。 controllers/blogs.js:路由处理程序。 models/blog.js:为 blogs 定义 Mongoose schema。 utils/logger.js:用于控制台的打印输出,告诉应用的运行状态。 utils/config.js:环境变量的处理,应用的其他部分可以通过导入配置模块来访问环境变量。 utils/middleware.js:自定义中间件模块。 以 bloglist 应用为例,将该应用重构。 初始 index.js: const http = require('http') const express = require('express') const app = express() const cors = require('cors') const mongoose = require('mongoose') const blogSchema = new mongoose....

2022-04-13 · 3 min

FullStackOpen:phonebook app / MongoDB 要点总结

教程:FullStackOpen2022/Part 3 - 用NodeJS和Express写服务端程序 前端部分:FullStackOpen:phonebook app / front-end 要点总结 后端部分:FullStackOpen:phonebook app / back-end 要点总结 App:React Phonebook App 1. 使用 MongoDB Atlas 创建 MongoDB MongoDB 是一个所谓的文档数据库。文档数据库在组织数据的方式以及它们所支持的查询语言方面不同于关系数据库。文档数据库通常被归类为NoSQL的术语集。 我们选择的 MongoDB 提供者是 MongoDB Atlas。 步骤: 创建并登录 MongoDB Atlas 账户。 创建一个集群(Create/Build a Cluster)。 选择任一 Free Tier 的提供商和地区。 等待 Cluster 准备好,这大约需要几分钟,在 Cluster 准备好之前不要继续。 在 Database Access 中为数据库创建用户凭据,用来让应用连接到云端数据库。 授予用户读写数据库的权限。 在 Network Access 中定义允许访问数据库的 IP 地址。为了方便,可以允许所有访问的 IP 地址:0.0.0.0/0。 回到 Cluster,点击 Connect 连接数据库,选择对应驱动,获得可以添加到应用的 MongoDB 客户端库的数据库地址。例:mongodb+srv://fullstack:<PASSWORD>@cluster0-ostce.mongodb.net/test?retryWrites=true 2. 使用 mongoose 连接数据库 可以通过官方 MongoDb Node....

2022-03-20 · 4 min

FullStackOpen:phonebook app / back-end 要点总结

教程:FullStackOpen2021/Part 3 - 用NodeJS和Express写服务端程序 前端部分:FullStackOpen2021:phonebook app / front-end 要点总结 数据库部分:FullStackOpen:phonebook app / MongoDB 要点总结 App:React Phonebook App 1. 用 express 搭建 RESTful API 直接使用 Node 内置的 HTTP web 服务器实现服务器代码是可行的。但是,它很麻烦,且不适合较大规模的应用。 为了提供一个比内置的 HTTP 模块更友好的界面,许多库已经开发出来以简化使用 Node 作为服务器端开发。到目前为止,最受欢迎的库是 express。 初始化 express: 选择一个合适的目录,使用 npm init 命令创建一个新模板。 (可选)在 package.json 文件的 scripts 对象中添加 start 命令:"start": "node index.js" 添加 express 库:npm install express。 代码的开头导入 express。这是一个function ,用于创建一个存储在 app 变量中的 express 应用。 将绑定的 HTTP 服务器分配给 app 变量 ,并监听发送到端口的 HTTP 请求。 const express = require("express"); const app = express(); ....

2021-12-28 · 4 min