发布于 2026-01-06 1 阅读
0

使用 Express 入门 ES6 JavaScript,进行 Node.js 开发

使用 Express 入门 ES6 JavaScript,进行 Node.js 开发

你是否曾经沉迷于使用 ES6 JavaScript 进行前端开发,并希望也能将其用于后端 Node.js 项目?本文将指导你如何设置 Babel 转译器,从而弥合现代 JavaScript 和旧版 Node.js 环境之间的鸿沟。

虽然 TypeScript 提供了许多优势,但 JavaScript 对许多开发者来说仍然是一个有效的选择。

先决条件

以下是您在学习本教程时需要遵循的一些要求:

什么是ES6?

ES6 指的是 ECMAScript 编程语言的第 6 个版本。ECMAScript 是 JavaScript 的标准化名称,版本 6 是继 2011 年发布的版本 5 之后的下一个版本。

它显著增强了 JavaScript 语言,并添加了许多新特性,从而简化了大规模软件开发。点击此处
了解更多信息。

巴别塔是什么?

Babel 是一个工具链,主要用于将 ECMAScript 2015+ (ES6+) 代码转换为在当前和旧版浏览器或环境中向后兼容的 JavaScript 版本。

这也意味着,在编写Node.js应用程序时,您可以使用Babel将我们的ES6代码转换为向后兼容的代码。

一段用于导入的普通 JavaScript 代码片段express如下所示:

var express = require('express')
Enter fullscreen mode Exit fullscreen mode

使用 ES6 语法时,你只需要像这样导入你的包:

import express from 'express' 
Enter fullscreen mode Exit fullscreen mode

使用 Node.js、Express 和 ES6 构建待办事项 API 🤸

我们将使用 NPM(Node.js 自带)作为包管理器,您也可以yarn根据自己的喜好使用其他包管理器。

项目设置

mkdir todo-api
cd todo-api
npm init -y
Enter fullscreen mode Exit fullscreen mode

这有助于初始化一个新的节点项目,并为我们的应用程序安装必要的软件包。

要安装 Babel 及其所需的依赖项,请打开终端并执行以下命令。

我们将使用 Babel 工具将现代 ES6 代码转换为与旧版 Node.js 兼容的旧版 ES5 代码。

npm i @babel/cli @babel/core @babel/node @babel/preset-env --save-dev
Enter fullscreen mode Exit fullscreen mode
npm i @babel/plugin-proposal-class-properties @babel/plugin-proposal-object-rest-spread --save-dev
Enter fullscreen mode Exit fullscreen mode
npm i rimraf nodemon --save-dev
Enter fullscreen mode Exit fullscreen mode

安装完所有软件包后,如果您之前没有打开过文件夹,请使用您喜欢的编辑器打开它。

我们将编辑该package.json文件,继续进行应用程序运行的设置,并构建可部署到任何托管平台的代码。
我们将更新文件中的脚本部分package.json以完成设置。

它应该长这样👇

 "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "rimraf dist && babel src --out-dir dist  --copy-files",
    "start": "node dist/app.js",
    "start:dev": "nodemon --exec babel-node src/app.js"
  },
Enter fullscreen mode Exit fullscreen mode

以下是文件scripts中属性的详细说明package.json

scripts文件中的属性允许package.json您定义可直接从命令行执行的自定义命令。

这简化了运行常见任务的过程,例如启动开发服务器、构建项目、运行测试或代码检查。

  • 构建:此命令使用 Babel 生成 ES6 代码,并将输出写入 dist 目录(每次构建时都会自动删除并重新创建)。dist 目录包含与根目录完全相同的文件和文件夹。唯一的区别在于,它包含从 ES6 转译为 ES5 的代码。

  • start:此命令将我们的 node.js 应用程序转换为 dist 目录中的 ES5 代码后启动它。

  • start:dev:此命令使用 nodemon 启动我们的应用程序(这有助于在任何 JavaScript 文件更改时自动重启服务器),并使用 babel-node 将内存中的所有 ES6 代码转换为 ES5。在生产环境中,您不希望这样做。因此,我们提供了 build 命令以获得更优化的性能。

接下来,我们在应用程序的根目录下创建一个.babelrc文件;该文件用于添加 Babel 包的配置,以确保其正常工作。
将以下代码复制到该文件中。

{
  "presets": [
    ["@babel/env", {
      "targets": {
        "node": "current"
      }
    }]
  ],
  "plugins": [
    "@babel/plugin-proposal-class-properties",
    "@babel/plugin-proposal-object-rest-spread"
  ]
}
Enter fullscreen mode Exit fullscreen mode

点击此链接了解更多关于使用 Babel 的信息。

安装 Express.js:

npm install express cors
Enter fullscreen mode Exit fullscreen mode
  • Express:一个流行的Node.js Web框架。

  • Cors:用于启用 CORS(跨域资源共享)的中间件。

创建src文件夹和所需文件:

mkdir src
touch app.js
touch store.js
Enter fullscreen mode Exit fullscreen mode

在终端中运行每一行代码。

最后,您的项目结构应如下所示:

todo-api/
├── src/
│   ├── app.js         # API entry point
│   ├── store.js         # In-memory data store
├── .babelrc             # Babel configuration
├── package.json         # Project metadata and dependencies
└── README.md            # Project documentation
Enter fullscreen mode Exit fullscreen mode

更新store.js文件

我们使用内存存储来存储数据,因为它非常适合开发和测试。

let todos = [];
let idCounter = 1;

export const getTodos = () => todos;

export const addTodo = (title) => {
  const todo = { id: idCounter++, title, completed: false };
  todos.push(todo);
  return todo;
};

export const updateTodo = (id, updates) => {
  const todo = todos.find((t) => t.id === id);
  if (!todo) return null;

  Object.assign(todo, updates);
  return todo;
};

export const deleteTodo = (id) => {
  const index = todos.findIndex((t) => t.id === id);
  if (index !== -1) {
    todos.splice(index, 1);
    return true;
  }
  return false;
};
Enter fullscreen mode Exit fullscreen mode
  • getTodos:以数组形式检索所有待办事项。

  • addTodo:创建一个新的待办事项并将其添加到待办事项列表中。

  • updateTodo:通过 ID 更新现有待办事项。

  • deleteTodo:根据 ID 从待办事项中删除记录。

更新 app.js 文件


import express from 'express';
import { getTodos, addTodo, updateTodo, deleteTodo } from './store.js';

const app = express();

app.use(json())

const PORT = process.env.PORT || 3000;

// Routes
app.get('/todos', (req, res) => {
  res.json(getTodos());
});

app.post('/todos', (req, res) => {
  const { title } = req.body;
  if (!title) {
    return res.status(400).json({ error: 'Title is required' });
  }
  const todo = addTodo(title);
  res.status(201).json(todo);
});

app.put('/todos/:id', (req, res) => {
  const id = parseInt(req.params.id, 10);
  const updates = req.body;

  const updatedTodo = updateTodo(id, updates);
  if (!updatedTodo) {
    return res.status(404).json({ error: 'Todo not found' });
  }
  res.json(updatedTodo);
});

app.delete('/todos/:id', (req, res) => {
  const id = parseInt(req.params.id, 10);

  const success = deleteTodo(id);
  if (!success) {
    return res.status(404).json({ error: 'Todo not found' });
  }
  res.status(204).end();
});

// Start server
app.listen(PORT, () => {
  console.log(`Server running at http://localhost:${PORT}`);
});

Enter fullscreen mode Exit fullscreen mode

运行服务器

npm run start:dev
Enter fullscreen mode Exit fullscreen mode

你应该会看到类似这样的内容。

终端显示 Node.js 服务器正在运行

在失眠症上测试我们的实现

基本 URL 将http://localhost:3000基于我的项目配置。

创建新待办事项

创建新的待办事项记录截图。

获取所有待办事项

获取所有待办事项记录的屏幕截图。

更新待办事项

更新待办事项记录截图

删除待办事项

删除待办事项记录截图。

如果您遇到任何问题,请确保您已准确按照所有步骤操作。如果您仍然遇到问题,请在下方留言,我将很乐意为您提供帮助。

您可以根据自己的喜好,使用任何架构或 Web 框架(例如 Fastify)来扩展此项目。添加数据库也是一个可选方案。一切都取决于您。


ES6 特性的主要优势🎯

  1. 箭头函数:简洁的函数定义语法。
  2. 解构:用于从对象和数组中提取值。
  3. 模板字面量:用于创建包含嵌入式表达式的字符串。
  4. Async/Await:用于异步操作,使代码更易读。

感谢你一路陪伴。🫡

  • 请与我分享您的 ES6 使用经验,我们一起在评论区交流吧。
  • 请将这篇文章分享给您认为会从我的经验中受益的人。谢谢!🎉

您可以在GitHub上找到本文的代码库

关注我并与我联系。

文章来源:https://dev.to/geekygeeky/get-started-with-es6-javascript-for-writing-nodejs-using-express-544h