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

JavaScript通過nodejs進行后端開發(fā)的過程

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

使用 JavaScript 通過 Node.js 進行后端開發(fā)主要包括以下幾個核心步驟和關鍵技術點:

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

1. 安裝 Node.js

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

2. 初始化項目

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

二、創(chuàng)建 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');
});

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

1. 路由處理

// 獲取查詢參數(shù)(如 /search?q=nodejs)
app.get('/search', (req, res) => {
  const query = req.query.q;
  res.send(`Searching for: ${query}`);
});
// 動態(tài)路由參數(shù)(如 /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();
});
// 靜態(tài)文件托管
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!');
});

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

1. MongoDB(NoSQL)

安裝 Mongoose:

npm install mongoose

示例代碼:

const mongoose = require('mongoose');
// 連接數(shù)據(jù)庫
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);
});

五、用戶認證(JWT)

安裝依賴:

npm install jsonwebtoken bcryptjs

示例代碼:

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

1.2 初始化項目

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

2. 創(chuàng)建 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. 核心功能實現(xiàn)

3.1 路由處理

// 獲取查詢參數(shù)(如 /search?q=nodejs)
app.get('/search', (req, res) => {
  const query = req.query.q;
  res.send(`Search for: ${query}`);
});
// 動態(tài)路由(如 /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(); // 繼續(xù)執(zhí)行后續(xù)邏輯
});

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

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

訪問 http://localhost:3000/image.jpg 即可返回 public/image.jpg。

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

4.1 MongoDB(NoSQL)

安裝 Mongoose:

npm install mongoose

示例代碼:

const mongoose = require('mongoose');
// 連接數(shù)據(jù)庫
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. 用戶認證(JWT)

安裝依賴:

npm install jsonwebtoken bcryptjs

示例代碼:

const jwt = require('jsonwebtoken');
const bcrypt = require('bcryptjs');
// 模擬用戶數(shù)據(jù)庫
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 容器化

創(chuàng)建 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/  # 業(yè)務邏輯
│   ├── models/       # 數(shù)據(jù)庫模型
│   ├── routes/       # 路由定義
│   ├── middleware/   # 中間件
│   └── app.js        # 入口文件
├── .env              # 環(huán)境變量
├── package.json
└── README.md

總結

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

按照以上步驟,你可以快速構建一個完整的 Node.js 后端服務!

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

相關文章

  • Ajax中GET與POST請求操作方法梳理介紹

    Ajax中GET與POST請求操作方法梳理介紹

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

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

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

    JS中進行字符串替換的方法

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

    js實現(xiàn)移動端輪播圖

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

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

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

    JavaScript入門基礎

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

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

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

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

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

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

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

    IE下JS保存圖片的簡單實例

    下面小編就為大家?guī)硪黄狪E下JS保存圖片的簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07

最新評論

故城县| 德州市| 水富县| 浦江县| 兴城市| 玉林市| 柳河县| 桃园市| 鄱阳县| 扎囊县| 宿州市| 红原县| 温泉县| 金溪县| 阿勒泰市| 芦山县| 北川| 宁安市| 新乡县| 雷州市| 榕江县| 延长县| 清涧县| 叶城县| 东光县| 铁力市| 苏尼特右旗| 蓝山县| 资兴市| 邓州市| 会昌县| 铜鼓县| 普陀区| 二连浩特市| 会同县| 缙云县| 柳林县| 桃园市| 三台县| 云安县| 通化县|