初始版本
创建 package
执行 npm init
命令为你的应用创建 package.json 文件。
npm init
这个命令会提示你输入一些内容,比如你应用的名称和版本。目前,你可以简单地按 RETURN 键接受大多数默认设置,除了入口点 entry point。
咱们倾向于使用 app.js 而不是 index.js。
其结果大致如下:
package name: (lr_rest_books_node)
version: (1.0.0)
description: RESTful API implemented with Express in Node.js.
entry point: (index.js) app.js
test command:
git repository: https://github.com/Literank/lr_rest_books_node.git
keywords: express,rest,books
author: literank.com
license: (ISC) MIT
About to write to /Users/netdong/workspace/2023/projects/lr_rest_books_node/package.json:
{
"name": "lr_rest_books_node",
"version": "1.0.0",
"description": "RESTful API implemented with Express in Node.js.",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "git+https://github.com/Literank/lr_rest_books_node.git"
},
"keywords": [
"express",
"rest",
"books"
],
"author": "literank.com",
"license": "MIT",
"bugs": {
"url": "https://github.com/Literank/lr_rest_books_node/issues"
},
"homepage": "https://github.com/Literank/lr_rest_books_node#readme"
}
该命令会创建一个 package.json
文件,其用于查看管理项目依赖。
安装 Express
npm install express
该命令会更新 package.json
文件并在项目中自动创建一个 package-lock.json
文件。
创建 app.js:
const express = require("express");
const app = express();
const port = 3000;
app.get("/ping", (req, res) => {
res.send({ message: "pong" });
});
app.listen(port, () => {
console.log(`Listening on port ${port}`);
});
如下运行程序:
node app.js
将得到一行如下信息:
Listening on port 3000
你的 API 服务器已经在 3000 端口跑起来了。
尝试使用 curl
命令测试 /ping
端点:
curl http://localhost:3000/ping
结果显示:
{"message":"pong"}
不错!你的服务器运作起来了。
转型到 TypeScript
在 Node.js 项目中使用 TypeScript 有许多好处:
- 静态类型检查:TypeScript 允许你为变量、参数和返回值定义类型。这有助于在开发过程中捕获与类型相关的错误,而不是在运行时,从而使代码更加健壮和可预测。
- 提高代码可读性:通过类型注解,代码变得更加自解释,这使得开发人员更容易理解代码库并有效地进行协作。对于大型项目而言,类型信息可当作额外的文档。
- 增强的 IDE 支持:TypeScript 在像 Visual Studio Code 这样的 IDE 中可提供更好的工具支持,比如提供代码导航、自动完成和内联文档等功能,这可以大大提高生产力和代码质量。
好的,让我们来进行转型。
执行如下命令来安装 typescript 相关依赖:
npm install typescript ts-node @types/node @types/express --save-dev
--save-dev
标记表示这些依赖都是开发依赖 devDependencies,只在开发阶段被使用。
在根目录创建 tsconfig.json:
{
"compilerOptions": {
"target": "ESNext",
"module": "CommonJS",
"outDir": "./dist",
"strict": true,
"esModuleInterop": true
},
"include": ["src/**/*.ts"],
"exclude": ["node_modules"]
}
移动 app.js 到 src/app.ts 并更新其内容:
import express, { Request, Response } from "express";
const app = express();
const port = process.env.PORT || 3000;
app.get("/ping", (req: Request, res: Response) => {
res.json({ message: "pong" });
});
app.listen(port, () => {
console.log(`Listening on port ${port}`);
});
添加 scripts 到 package.json:
@@ -4,7 +4,9 @@
"description": "RESTful API implemented with Express in Node.js.",
"main": "app.js",
"scripts": {
- "test": "echo \"Error: no test specified\" && exit 1"
+ "dev": "ts-node src/app.ts",
+ "build": "tsc",
+ "serve": "node dist/app.js"
},
"repository": {
运行新版的程序:
npm run dev
再次尝试使用 curl
命令测试 /ping
端点:
curl http://localhost:3000/ping
结果依然显示:
{"message":"pong"}
不错!TypeScript 版本的 API 运行正常。