JavaScript通过nodejs进行后端开发的过程

 更新时间:2025年06月30日 14:54:56   作者:@多弗朗明哥·汤姆  
本文系统介绍了Node.js后端开发流程,涵盖环境搭建、HTTP服务器创建(http/Express)、路由中间件、数据库集成(MongoDB/MySQL)、JWT认证、文件上传、错误处理及部署(PM2/Docker),并提供项目结构建议,助你快速构建应用,感兴趣的朋友一起看看吧

使用 JavaScript 通过 Node.js 进行后端开发主要包括以下几个核心步骤和关键技术点:

一、基础环境搭建

1. 安装 Node.js

  • Node.js 官网 下载并安装最新 LTS 版本
  • 验证安装:
  • node -v  # 检查 Node.js 版本
    npm -v   # 检查 npm 版本

2. 初始化项目

mkdir my-backend
cd my-backend
npm init -y  # 生成 package.json

二、创建 HTTP 服务器

1. 原生http模块(基础示例)

// server.js
const http = require('http');
const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('Hello from Node.js!');
});
server.listen(3000, () => {
  console.log('Server running at http://localhost:3000');
});

运行:node server.js

2. 使用 Express 框架(推荐)

安装 Express:

npm install express

 示例代码:

// app.js
const express = require('express');
const app = express();
app.get('/', (req, res) => {
  res.send('Hello from Express!');
});
app.listen(3000, () => {
  console.log('Express server running on port 3000');
});

三、核心功能实现

1. 路由处理

// 获取查询参数(如 /search?q=nodejs)
app.get('/search', (req, res) => {
  const query = req.query.q;
  res.send(`Searching for: ${query}`);
});
// 动态路由参数(如 /users/123)
app.get('/users/:id', (req, res) => {
  res.send(`User ID: ${req.params.id}`);
});
// POST 请求处理
app.post('/users', express.json(), (req, res) => {
  const userData = req.body;
  res.status(201).json({ id: 1, ...userData });
});

2. 中间件(Middleware)

// 日志中间件
app.use((req, res, next) => {
  console.log(`${req.method} ${req.url}`);
  next();
});
// 静态文件托管
app.use(express.static('public'));  // 访问 http://localhost:3000/image.jpg
// 错误处理中间件
app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).send('Server Error!');
});

四、数据库集成

1. MongoDB(NoSQL)

安装 Mongoose:

npm install mongoose

示例代码:

const mongoose = require('mongoose');
// 连接数据库
mongoose.connect('mongodb://localhost:27017/mydb');
// 定义数据模型
const User = mongoose.model('User', {
  name: String,
  email: { type: String, unique: true }
});
// 创建用户
app.post('/users', async (req, res) => {
  try {
    const user = new User(req.body);
    await user.save();
    res.status(201).json(user);
  } catch (err) {
    res.status(400).json({ error: err.message });
  }
});

2. MySQL(SQL)

安装 mysql2

npm install mysql2

示例代码:

const mysql = require('mysql2/promise');
// 创建连接池
const pool = mysql.createPool({
  host: 'localhost',
  user: 'root',
  password: 'yourpassword',
  database: 'test'
});
// 查询示例
app.get('/products', async (req, res) => {
  const [rows] = await pool.query('SELECT * FROM products');
  res.json(rows);
});

五、用户认证(JWT)

安装依赖:

npm install jsonwebtoken bcryptjs

示例代码:

const jwt = require('jsonwebtoken');
const bcrypt = require('bcryptjs');
// 模拟用户数据库
const users = [];
// 注册
app.post('/register', async (req, res) => {
  const hashedPassword = await bcrypt.hash(req.body.password, 10);
  users.push({
    username: req.body.username,
    password: hashedPassword
  });
  res.status(201).send('User registered');
});
// 登录
app.post('/login', async (req, res) => {
  const user = users.find(u => u.username === req.body.username);
  if (!user || !await bcrypt.compare(req.body.password, user.password)) {
    return res.status(401).send('Invalid credentials');
  }
  const token = jwt.sign({ username: user.username }, 'your-secret-key', {
    expiresIn: '1h'
  });
  res.json({ token });
});
// 受保护的路由
app.get('/profile', (req, res) => {
  const token = req.headers.authorization?.split(' ')[1];
  if (!token) return res.status(401).send('Unauthorized');
  try {
    const decoded = jwt.verify(token, 'your-secret-key');
    res.send(`Welcome, ${decoded.username}`);
  } catch (err) {
    res.status(401).send('Invalid token');
  }
});

六、文件上传

使用 multer 中间件:

npm install multer

示例代码:

const multer = require使用 JavaScript 通过 Node.js 进行后端开发,可以按照以下步骤和示例代码实现:
---
## **1. 基础准备**
### 1.1 安装 Node.js
- 下载安装包:[Node.js 官网](https://nodejs.org/)
- 验证安装:
  ```bash
  node -v  # 检查版本
  npm -v   # 检查包管理器

1.2 初始化项目

mkdir node-backend
cd node-backend
npm init -y  # 生成 package.json

2. 创建 HTTP 服务器

2.1 原生http模块(基础示例)

// server.js
const http = require('http');
const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('Hello, Node.js!');
});
server.listen(3000, () => {
  console.log('Server running at http://localhost:3000');
});

运行:

node server.js

2.2 使用 Express(推荐)

安装 Express:

npm install express

示例代码:

// app.js
const express = require('express');
const app = express();
app.get('/', (req, res) => {
  res.send('Hello, Express!');
});
app.listen(3000, () => {
  console.log('Express server running at http://localhost:3000');
});

3. 核心功能实现

3.1 路由处理

// 获取查询参数(如 /search?q=nodejs)
app.get('/search', (req, res) => {
  const query = req.query.q;
  res.send(`Search for: ${query}`);
});
// 动态路由(如 /users/123)
app.get('/users/:id', (req, res) => {
  res.send(`User ID: ${req.params.id}`);
});
// 处理 POST 请求
app.post('/login', (req, res) => {
  res.send('Login endpoint');
});

3.2 中间件(Middleware)

// 解析 JSON 请求体
app.use(express.json());
// 自定义中间件(记录请求日志)
app.use((req, res, next) => {
  console.log(`[${new Date().toISOString()}] ${req.method} ${req.url}`);
  next(); // 继续执行后续逻辑
});

3.3 静态文件服务

app.use(express.static('public')); // 托管 public 文件夹

访问 http://localhost:3000/image.jpg 即可返回 public/image.jpg

4. 数据库交互

4.1 MongoDB(NoSQL)

安装 Mongoose:

npm install mongoose

示例代码:

const mongoose = require('mongoose');
// 连接数据库
mongoose.connect('mongodb://localhost:27017/mydb');
// 定义数据模型
const User = mongoose.model('User', {
  name: String,
  email: String
});
// 插入数据
app.post('/users', async (req, res) => {
  const user = new User(req.body);
  await user.save();
  res.status(201).send(user);
});
// 查询数据
app.get('/users', async (req, res) => {
  const users = await User.find();
  res.send(users);
});

4.2 MySQL(SQL)

安装 mysql2

npm install mysql2

示例代码:

const mysql = require('mysql2/promise');
// 创建连接池
const pool = mysql.createPool({
  host: 'localhost',
  user: 'root',
  password: 'password',
  database: 'test'
});
// 查询数据
app.get('/users', async (req, res) => {
  const [rows] = await pool.query('SELECT * FROM users');
  res.send(rows);
});

5. 用户认证(JWT)

安装依赖:

npm install jsonwebtoken bcryptjs

示例代码:

const jwt = require('jsonwebtoken');
const bcrypt = require('bcryptjs');
// 模拟用户数据库
const users = [];
// 注册
app.post('/register', async (req, res) => {
  const hashedPassword = await bcrypt.hash(req.body.password, 10);
  users.push({ 
    username: req.body.username, 
    password: hashedPassword 
  });
  res.status(201).send('User registered');
});
// 登录
app.post('/login', async (req, res) => {
  const user = users.find(u => u.username === req.body.username);
  if (!user || !await bcrypt.compare(req.body.password, user.password)) {
    return res.status(401).send('Invalid credentials');
  }
  // 生成 JWT Token
  const token = jwt.sign({ username: user.username }, 'your-secret-key', { 
    expiresIn: '1h' 
  });
  res.send({ token });
});
// 受保护的路由
app.get('/profile', (req, res) => {
  const token = req.headers.authorization?.split(' ')[1];
  if (!token) return res.status(403).send('Token required');
  try {
    const decoded = jwt.verify(token, 'your-secret-key');
    res.send(`Welcome, ${decoded.username}`);
  } catch (err) {
    res.status(401).send('Invalid token');
  }
});

6. 错误处理

6.1 同步错误

app.get('/error', (req, res) => {
  throw new Error('Test error');
});

6.2 异步错误

app.get('/async-error', async (req, res, next) => {
  try {
    await someAsyncOperation();
  } catch (err) {
    next(err); // 传递给错误处理中间件
  }
});

6.3 全局错误处理

app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).send('Something broke!');
});

7. 部署上线

7.1 使用 PM2(进程管理)

安装:

npm install pm2 -g

启动服务:

pm2 start app.js --name "my-api"

常用命令:

pm2 logs       # 查看日志
pm2 restart all # 重启服务

7.2 Docker 容器化

创建 Dockerfile

FROM node:18
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]

构建并运行:

docker build -t node-app .
docker run -p 3000:3000 node-app

8. 项目结构建议

node-backend/
├── src/
│   ├── controllers/  # 业务逻辑
│   ├── models/       # 数据库模型
│   ├── routes/       # 路由定义
│   ├── middleware/   # 中间件
│   └── app.js        # 入口文件
├── .env              # 环境变量
├── package.json
└── README.md

总结

  1. 基础服务:用 httpExpress 创建服务器。
  2. 路由与中间件:处理请求、静态文件和日志。
  3. 数据库:集成 MongoDB 或 MySQL。
  4. 安全:JWT 认证和密码加密。
  5. 部署:通过 PM2 或 Docker 上线。

按照以上步骤,你可以快速构建一个完整的 Node.js 后端服务!

到此这篇关于JavaScript怎么通过nodejs进行后端开发的文章就介绍到这了,更多相关js nodejs后端开发内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 小程序的上传文件接口的注意要点解析

    小程序的上传文件接口的注意要点解析

    这篇文章主要介绍了小程序的上传文件接口的注意解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • JS实现远程控制的基本原理和实现方法

    JS实现远程控制的基本原理和实现方法

    远程控制是指通过网络等远距离通讯手段控制另一设备的操作行为,在现实生活中,随着物联网技术的不断发展,远程控制技术越来越重要,本文将详细介绍 JS 实现远程控制的基本原理、开发流程和实现方法,需要的朋友可以参考下
    2023-06-06
  • 浅析JavaScript中五种模块系统的使用

    浅析JavaScript中五种模块系统的使用

    模块系统是什么?简单来说,其实就是我们在一个文件里写代码,声明一些可以导出的字段,然后另一个文件可以将其导入并使用。今天我们来聊聊 JavaScript 的模块系统,感兴趣的可以了解一下
    2022-11-11
  • js判断移动端横竖屏视口检测实现的几种方法

    js判断移动端横竖屏视口检测实现的几种方法

    最近做歌一个小项目,但是要放到我们的app上,然而需要横竖屏使用不同的样式,本文就来介绍一下js判断移动端横竖屏视口检测实现的几种方法,感兴趣的可以了解一下
    2021-07-07
  • javascript判断ie浏览器6/7版本加载不同样式表的实现代码

    javascript判断ie浏览器6/7版本加载不同样式表的实现代码

    ie6/ie7的兼容问题很让人苦恼,我们可以针对这两个版本的浏览器单独写独立的样式表,来解决兼容问题。这里的例子以判断ie6与ie7来加载不同的样式表
    2011-12-12
  • JS脚本实现定时到网站上签到/签退功能

    JS脚本实现定时到网站上签到/签退功能

    这篇文章主要介绍了JS脚本实现定时到网站上签到/签退功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • js实现图片上传并预览功能

    js实现图片上传并预览功能

    这篇文章主要为大家详细介绍了js实现图片上传并预览功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • [js高手之路]HTML标签解释成DOM节点的实现方法

    [js高手之路]HTML标签解释成DOM节点的实现方法

    下面小编就为大家带来一篇[js高手之路]HTML标签解释成DOM节点的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • 手机端js和html5刮刮卡效果

    手机端js和html5刮刮卡效果

    这篇文章主要为大家详细介绍了手机端js和html5刮刮卡效果,刮开之后是随机生成的8位码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • JS实现双击内容变为可编辑状态

    JS实现双击内容变为可编辑状态

    在一些网站上我们经常看到交互性很强的功能。一些用户资料可以直接双击出现文本框,并在此输入新的资料即可修改,无需再按确定按钮等。怎么实现的呢?今天小编给大家分享JS实现双击内容变为可编辑状态,需要的的朋友参考下
    2017-03-03

最新评论