最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript通過(guò)nodejs進(jìn)行后端開發(fā)的過(guò)程

 更新時(shí)間:2025年06月30日 14:54:56   作者:@多弗朗明哥·湯姆  
本文系統(tǒng)介紹了Node.js后端開發(fā)流程,涵蓋環(huán)境搭建、HTTP服務(wù)器創(chuàng)建(http/Express)、路由中間件、數(shù)據(jù)庫(kù)集成(MongoDB/MySQL)、JWT認(rèn)證、文件上傳、錯(cuò)誤處理及部署(PM2/Docker),并提供項(xiàng)目結(jié)構(gòu)建議,助你快速構(gòu)建應(yīng)用,感興趣的朋友一起看看吧

使用 JavaScript 通過(guò) Node.js 進(jìn)行后端開發(fā)主要包括以下幾個(gè)核心步驟和關(guān)鍵技術(shù)點(diǎn):

一、基礎(chǔ)環(huán)境搭建

1. 安裝 Node.js

  • Node.js 官網(wǎng) 下載并安裝最新 LTS 版本
  • 驗(yàn)證安裝:
  • node -v  # 檢查 Node.js 版本
    npm -v   # 檢查 npm 版本

2. 初始化項(xiàng)目

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

二、創(chuàng)建 HTTP 服務(wù)器

1. 原生http模塊(基礎(chǔ)示例)

// 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');
});

運(yùn)行: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');
});

三、核心功能實(shí)現(xiàn)

1. 路由處理

// 獲取查詢參數(shù)(如 /search?q=nodejs)
app.get('/search', (req, res) => {
  const query = req.query.q;
  res.send(`Searching for: ${query}`);
});
// 動(dòng)態(tài)路由參數(shù)(如 /users/123)
app.get('/users/:id', (req, res) => {
  res.send(`User ID: ${req.params.id}`);
});
// POST 請(qǐng)求處理
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();
});
// 靜態(tài)文件托管
app.use(express.static('public'));  // 訪問(wèn) http://localhost:3000/image.jpg
// 錯(cuò)誤處理中間件
app.use((err, req, res, next) => {
  console.error(err.stack);
  res.status(500).send('Server Error!');
});

四、數(shù)據(jù)庫(kù)集成

1. MongoDB(NoSQL)

安裝 Mongoose:

npm install mongoose

示例代碼:

const mongoose = require('mongoose');
// 連接數(shù)據(jù)庫(kù)
mongoose.connect('mongodb://localhost:27017/mydb');
// 定義數(shù)據(jù)模型
const User = mongoose.model('User', {
  name: String,
  email: { type: String, unique: true }
});
// 創(chuàng)建用戶
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');
// 創(chuàng)建連接池
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);
});

五、用戶認(rèn)證(JWT)

安裝依賴:

npm install jsonwebtoken bcryptjs

示例代碼:

const jwt = require('jsonwebtoken');
const bcrypt = require('bcryptjs');
// 模擬用戶數(shù)據(jù)庫(kù)
const users = [];
// 注冊(cè)
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 });
});
// 受保護(hù)的路由
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 通過(guò) Node.js 進(jìn)行后端開發(fā),可以按照以下步驟和示例代碼實(shí)現(xiàn):
---
## **1. 基礎(chǔ)準(zhǔn)備**
### 1.1 安裝 Node.js
- 下載安裝包:[Node.js 官網(wǎng)](https://nodejs.org/)
- 驗(yàn)證安裝:
  ```bash
  node -v  # 檢查版本
  npm -v   # 檢查包管理器

1.2 初始化項(xiàng)目

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

2. 創(chuàng)建 HTTP 服務(wù)器

2.1 原生http模塊(基礎(chǔ)示例)

// 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');
});

運(yùn)行:

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. 核心功能實(shí)現(xiàn)

3.1 路由處理

// 獲取查詢參數(shù)(如 /search?q=nodejs)
app.get('/search', (req, res) => {
  const query = req.query.q;
  res.send(`Search for: ${query}`);
});
// 動(dòng)態(tài)路由(如 /users/123)
app.get('/users/:id', (req, res) => {
  res.send(`User ID: ${req.params.id}`);
});
// 處理 POST 請(qǐng)求
app.post('/login', (req, res) => {
  res.send('Login endpoint');
});

3.2 中間件(Middleware)

// 解析 JSON 請(qǐng)求體
app.use(express.json());
// 自定義中間件(記錄請(qǐng)求日志)
app.use((req, res, next) => {
  console.log(`[${new Date().toISOString()}] ${req.method} ${req.url}`);
  next(); // 繼續(xù)執(zhí)行后續(xù)邏輯
});

3.3 靜態(tài)文件服務(wù)

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

訪問(wèn) http://localhost:3000/image.jpg 即可返回 public/image.jpg。

4. 數(shù)據(jù)庫(kù)交互

4.1 MongoDB(NoSQL)

安裝 Mongoose:

npm install mongoose

示例代碼:

const mongoose = require('mongoose');
// 連接數(shù)據(jù)庫(kù)
mongoose.connect('mongodb://localhost:27017/mydb');
// 定義數(shù)據(jù)模型
const User = mongoose.model('User', {
  name: String,
  email: String
});
// 插入數(shù)據(jù)
app.post('/users', async (req, res) => {
  const user = new User(req.body);
  await user.save();
  res.status(201).send(user);
});
// 查詢數(shù)據(jù)
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');
// 創(chuàng)建連接池
const pool = mysql.createPool({
  host: 'localhost',
  user: 'root',
  password: 'password',
  database: 'test'
});
// 查詢數(shù)據(jù)
app.get('/users', async (req, res) => {
  const [rows] = await pool.query('SELECT * FROM users');
  res.send(rows);
});

5. 用戶認(rèn)證(JWT)

安裝依賴:

npm install jsonwebtoken bcryptjs

示例代碼:

const jwt = require('jsonwebtoken');
const bcrypt = require('bcryptjs');
// 模擬用戶數(shù)據(jù)庫(kù)
const users = [];
// 注冊(cè)
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 });
});
// 受保護(hù)的路由
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. 錯(cuò)誤處理

6.1 同步錯(cuò)誤

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

6.2 異步錯(cuò)誤

app.get('/async-error', async (req, res, next) => {
  try {
    await someAsyncOperation();
  } catch (err) {
    next(err); // 傳遞給錯(cuò)誤處理中間件
  }
});

6.3 全局錯(cuò)誤處理

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

7. 部署上線

7.1 使用 PM2(進(jìn)程管理)

安裝:

npm install pm2 -g

啟動(dòng)服務(wù):

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

常用命令:

pm2 logs       # 查看日志
pm2 restart all # 重啟服務(wù)

7.2 Docker 容器化

創(chuàng)建 Dockerfile

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

構(gòu)建并運(yùn)行:

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

8. 項(xiàng)目結(jié)構(gòu)建議

node-backend/
├── src/
│   ├── controllers/  # 業(yè)務(wù)邏輯
│   ├── models/       # 數(shù)據(jù)庫(kù)模型
│   ├── routes/       # 路由定義
│   ├── middleware/   # 中間件
│   └── app.js        # 入口文件
├── .env              # 環(huán)境變量
├── package.json
└── README.md

總結(jié)

  1. 基礎(chǔ)服務(wù):用 httpExpress 創(chuàng)建服務(wù)器。
  2. 路由與中間件:處理請(qǐng)求、靜態(tài)文件和日志。
  3. 數(shù)據(jù)庫(kù):集成 MongoDB 或 MySQL。
  4. 安全:JWT 認(rèn)證和密碼加密。
  5. 部署:通過(guò) PM2 或 Docker 上線。

按照以上步驟,你可以快速構(gòu)建一個(gè)完整的 Node.js 后端服務(wù)!

到此這篇關(guān)于JavaScript怎么通過(guò)nodejs進(jìn)行后端開發(fā)的文章就介紹到這了,更多相關(guān)js nodejs后端開發(fā)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Ajax中GET與POST請(qǐng)求操作方法梳理介紹

    Ajax中GET與POST請(qǐng)求操作方法梳理介紹

    Ajax全稱是Asynchronous Javascript And XML(異步JavaScript和XML),在網(wǎng)頁(yè)中,利用XMLHttpRequest對(duì)象和服務(wù)器進(jìn)行數(shù)據(jù)交互的方式,這篇文章主要介紹了Ajax中GET與POST請(qǐng)求操作
    2022-11-11
  • JS原生2048小游戲源碼分享(全網(wǎng)最新)

    JS原生2048小游戲源碼分享(全網(wǎng)最新)

    這篇文章主要介紹了JS原生2048小游戲源碼分享,實(shí)現(xiàn)代碼全部是給予js實(shí)現(xiàn)的,代碼簡(jiǎn)單易懂對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-05-05
  • JS中進(jìn)行字符串替換的方法

    JS中進(jìn)行字符串替換的方法

    replace() 方法用于在字符串中用一些字符替換另一些字符,或替換一個(gè)與正則表達(dá)式匹配的子串,這篇文章主要介紹了js中進(jìn)行字符串替換的方法,需要的朋友可以參考下
    2024-01-01
  • js實(shí)現(xiàn)移動(dòng)端輪播圖

    js實(shí)現(xiàn)移動(dòng)端輪播圖

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)移動(dòng)端輪播圖效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • javascript?變量聲明?var,let,const?的區(qū)別

    javascript?變量聲明?var,let,const?的區(qū)別

    這篇文章主要介紹了javascript?變量聲明?var,let,const?的區(qū)別,變量聲明,每種編程語(yǔ)言必不可少的語(yǔ)法,在javascript中,變量的聲明相對(duì)其他語(yǔ)言來(lái)說(shuō),算是比較簡(jiǎn)單的。更多相關(guān)的具體內(nèi)容需要的小伙伴可以參考一下
    2022-06-06
  • JavaScript入門基礎(chǔ)

    JavaScript入門基礎(chǔ)

    在學(xué)習(xí)JavaScript之前,必須具備HTML和CSS知識(shí),Javascript是一種解釋性的,基于對(duì)象的腳本語(yǔ)言(aninterpreted,object-basedscriptinglanguage)。這篇文章主要講解JavaScript入門基礎(chǔ),需要的朋友可以參考下
    2015-08-08
  • JS構(gòu)造函數(shù)與原型prototype的區(qū)別介紹

    JS構(gòu)造函數(shù)與原型prototype的區(qū)別介紹

    下面小編就為大家?guī)?lái)一篇JS構(gòu)造函數(shù)與原型prototype的區(qū)別介紹。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-07-07
  • JS異步編程之generator與async/await語(yǔ)法糖詳解

    JS異步編程之generator與async/await語(yǔ)法糖詳解

    這篇文章主要為大家詳細(xì)介紹了JS異步編程中g(shù)enerator與async/await語(yǔ)法糖的使用,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以學(xué)習(xí)一下
    2022-11-11
  • javascript數(shù)組去重方法分析

    javascript數(shù)組去重方法分析

    這篇文章主要介紹了javascript數(shù)組去重方法,通過(guò)2個(gè)示例對(duì)比分析了javascript數(shù)組去重的原理與操作技巧,需要的朋友可以參考下
    2016-12-12
  • IE下JS保存圖片的簡(jiǎn)單實(shí)例

    IE下JS保存圖片的簡(jiǎn)單實(shí)例

    下面小編就為大家?guī)?lái)一篇IE下JS保存圖片的簡(jiǎn)單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-07-07

最新評(píng)論

清河县| 承德县| 漯河市| 淅川县| 凉城县| 盐边县| 常山县| 德钦县| 文成县| 上蔡县| 吉水县| 忻州市| 北宁市| 伽师县| 长沙县| 阳信县| 沧州市| 建宁县| 宣威市| 辽阳市| 扶沟县| 衡阳县| 乌鲁木齐市| 仙居县| 共和县| 清水河县| 临朐县| 枣阳市| 庆城县| 平湖市| 南和县| 永顺县| 来宾市| 贵州省| 祥云县| 荥经县| 宜阳县| 鄂托克前旗| 甘德县| 兴城市| 萨嘎县|