快速搭建Node.js服務指南

Node.js是構建高效、可擴展網絡應用的理想選擇。以下是幾種快速搭建Node.js服務的方法。

方法一:使用Express(最流行框架)

1. 初始化項目

mkdir my-node-service
cd my-node-service
npm init -y

2. 安裝Express

npm install express

3. 基礎服務代碼

創建app.jsindex.js文件:

const express = require('express')
const app = express()
const port = 3000// 中間件
app.use(express.json())// 路由
app.get('/', (req, res) => {res.send('Hello World!')
})// 帶參數的路由
app.get('/user/:id', (req, res) => {res.send(`User ID: ${req.params.id}`)
})// POST請求示例
app.post('/data', (req, res) => {console.log(req.body)res.json({ received: true })
})// 啟動服務
app.listen(port, () => {console.log(`服務運行在 http://localhost:${port}`)
})

4. 運行服務

node app.js

方法二:使用Koa(更現代的框架)

1. 安裝Koa

npm install koa @koa/router

2. 基礎服務代碼

const Koa = require('koa')
const Router = require('@koa/router')const app = new Koa()
const router = new Router()router.get('/', (ctx) => {ctx.body = 'Hello Koa!'
})app.use(router.routes())
app.use(router.allowedMethods())app.listen(3000, () => {console.log('服務運行在 http://localhost:3000')
})

方法三:使用Fastify(高性能框架)

1. 安裝Fastify

npm install fastify

2. 基礎服務代碼

const fastify = require('fastify')({ logger: true })fastify.get('/', async (request, reply) => {return { hello: 'world' }
})const start = async () => {try {await fastify.listen({ port: 3000 })} catch (err) {fastify.log.error(err)process.exit(1)}
}
start()

數據庫集成(以MongoDB為例)

1. 安裝mongoose

npm install mongoose

2. 連接數據庫

const mongoose = require('mongoose')mongoose.connect('mongodb://localhost:27017/mydatabase').then(() => console.log('MongoDB連接成功')).catch(err => console.error('MongoDB連接失敗', err))

3. 定義模型和路由

const User = mongoose.model('User', new mongoose.Schema({name: String,email: String
}))app.get('/users', async (req, res) => {const users = await User.find()res.json(users)
})app.post('/users', async (req, res) => {const user = new User(req.body)await user.save()res.status(201).send(user)
})

中間件使用示例

1. 常用中間件安裝

npm install cors morgan helmet

2. 中間件配置

const cors = require('cors')
const morgan = require('morgan')
const helmet = require('helmet')app.use(cors()) // 跨域支持
app.use(morgan('combined')) // 請求日志
app.use(helmet()) // 安全頭設置

項目結構建議

my-node-service/
├── node_modules/
├── src/
│   ├── controllers/    # 控制器
│   ├── models/         # 數據模型
│   ├── routes/         # 路由定義
│   ├── middlewares/    # 自定義中間件
│   ├── utils/          # 工具函數
│   └── app.js          # 主應用文件
├── .env                # 環境變量
├── package.json
└── README.md

環境配置

1. 安裝dotenv

npm install dotenv

2. 創建.env文件

PORT=3000
MONGODB_URI=mongodb://localhost:27017/mydatabase
JWT_SECRET=mysecretkey

3. 加載配置

require('dotenv').config()const port = process.env.PORT || 3000
app.listen(port, () => {console.log(`服務運行在 ${port} 端口`)
})

錯誤處理

1. 添加錯誤處理中間件

// 最后添加
app.use((err, req, res, next) => {console.error(err.stack)res.status(500).send('出錯了!')
})

2. 異步錯誤處理

const asyncHandler = fn => (req, res, next) => Promise.resolve(fn(req, res, next)).catch(next)app.get('/async', asyncHandler(async (req, res) => {const data = await someAsyncOperation()res.json(data)
}))

服務部署

1. 使用PM2進程管理

npm install pm2 -g
pm2 start app.js

2. 常用PM2命令

pm2 list         # 查看運行中的進程
pm2 stop app     # 停止應用
pm2 restart app  # 重啟應用
pm2 logs         # 查看日志

進階建議

  1. API文檔:使用Swagger UI

    npm install swagger-ui-express swagger-jsdoc
    
  2. 驗證:使用JWT

    npm install jsonwebtoken bcryptjs
    
  3. 測試:使用Jest

    npm install jest supertest --save-dev
    
  4. TypeScript支持

    npm install typescript @types/node @types/express --save-dev
    
  5. Docker化

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

選擇適合你項目需求的框架和方法,Express適合大多數Web應用,Koa提供更現代的中間件機制,Fastify則專注于高性能。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/916987.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/916987.shtml
英文地址,請注明出處:http://en.pswp.cn/news/916987.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

通義千問Qwen3-30B-A3B-Thinking-2507技術解析:推理模型的工程實踐突破

Qwen3-30B-A3B模型架構圖2025年7月30日,阿里云通義千問團隊發布了Qwen3-30B-A3B-Thinking-2507推理模型,這是繼Qwen3-30B-A3B-Instruct-2507后的又一力作。作為專注于推理任務的專用模型,它在數學能力測試AIME25上取得85.0分,超越…

【源力覺醒 創作者計劃】文心一言與deepseek集成springboot開發哪個更方便

一.實驗背景 當前文心一言和deepseek都開源了,二者都可以作為大模型應用開發的模型基礎了,我們都可以編寫springboot項目來集成deepseek和文心一言了 二.實驗目標 本文基于實際操作,通過實際操作來對比文心一言和deepseek在集成到springbo…

核磁共振數據T2幾何均值計算

1、T? 幾何均值公式如下:2、核磁T2幾何均值計算代碼 CSV 文件文件格式: 每一行是一個樣點(樣品深度),列為:第一列是“深度”或其他;第二列及以后(如 TASPEC0 ~ TASPEC199&#xff0…

微服務架構技巧篇——接口類設計技巧

目錄 一、微服務架構的特點 二、微服務接口類設計技巧 2.1、BFF(Backend For Frontend) 2.1.1、 服務分布式帶來的第一個挑戰導致的幾個典型問題 2.1.2、什么是 BFF 2.1.3、BFF 應用場景 2.1.4、BFF 落地經驗 2.1.4.1、前端負責 BFF 開發優缺點 2.1.4.2、后端負責 BFF 開發優…

C++游戲開發(2)

直接上代碼 1.首先是頭文件編寫 #include <iostream> #include <graphics.h> #include <string> 2,添加畫布 長1280&#xff0c;寬720 initgraph(1280, 720); 3.添加主循環 bool running true; while(runing) { } 4.定義結構體變量msg ExMessge msg; 5.開…

Unity開發2D類銀河惡魔城游戲學習筆記目錄

Unity開發2D類銀河惡魔城游戲學習筆記 Unity教程&#xff08;零&#xff09;Unity和VS的使用相關內容 玩家狀態機 Unity教程&#xff08;一&#xff09;開始學習狀態機 Unity教程&#xff08;二&#xff09;角色移動的實現 Unity教程&#xff08;三&#xff09;角色跳躍的實現…

智慧社區項目開發(三)——基于 Spring Boot 實現動態路由加載:從數據庫到前端菜單的完整方案

在后臺管理系統中&#xff0c;不同用戶角色往往擁有不同的操作權限&#xff0c;對應的菜單展示也需動態調整。動態路由加載正是解決這一問題的核心方案 —— 根據登錄用戶的權限&#xff0c;從數據庫查詢其可訪問的菜單&#xff0c;封裝成前端所需的路由結構并返回。本文將詳細…

Python在自動化與運維領域的核心角色:工具化、平臺化與智能化

&#x1f4dd;個人主頁&#x1f339;&#xff1a;慌ZHANG-CSDN博客 &#x1f339;&#x1f339;期待您的關注 &#x1f339;&#x1f339; 引言 在 IT 系統日益復雜、運維任務持續增長的今天&#xff0c;自動化已成為企業基礎設施管理的關鍵方向。Python 以其簡潔的語法、強大…

RAG實戰指南 Day 28:RAG系統緩存與性能優化

【RAG實戰指南 Day 28】RAG系統緩存與性能優化 開篇 歡迎來到"RAG實戰指南"系列的第28天&#xff01;今天我們將深入探討RAG系統的緩存機制與性能優化策略。在實際生產環境中&#xff0c;RAG系統往往面臨高并發、低延遲的需求&#xff0c;而合理的緩存設計和性能優…

swanlab實驗優雅起名

init中的參數的作用project&#xff1a;整個實驗的名字&#xff1b;experiment_name&#xff1a;在這個實驗中&#xff0c;你的名字是什么&#xff1b; 比如說現在我們要進行對比實驗&#xff0c;PEAN和Triflownet分別是對比方法的名字&#xff0c;這樣的好處是&#xff0c;她們…

Nestjs框架: NestJS 核心機制解析 —— DI(依賴注入)容器與模塊化工作原理

理解 NestJS 的 DI 管理機制 我們想要了解依賴注入&#xff08;Dependency Injection, DI&#xff09;最核心的工作邏輯NestJS 擁有自己的一套 DI 管理系統&#xff0c;它通過一個稱為 DI 容器 的機制&#xff0c;來統一管理應用中所有類&#xff08;class&#xff09;的依賴關…

日語學習-日語知識點小記-構建基礎-JLPT-N3階段(12):文法+單詞

日語學習-日語知識點小記-構建基礎-JLPT-N3階段&#xff08;12&#xff09;&#xff1a;文法單詞 1、前言&#xff08;1&#xff09;情況說明&#xff08;2&#xff09;工程師的信仰2、知識點&#xff11;ーたぶん 多分&#xff12;ーV&#xff08;て&#xff09;いく ? V&…

【趙渝強老師】OceanBase租戶的資源管理

OceanBase數據庫是多租戶的數據庫系統&#xff0c;一個集群內可包含多個相互獨立的租戶&#xff0c;每個租戶提供獨立的數據庫服務。在OceanBase數據庫中&#xff0c;使用資源配置&#xff08;Unit Config&#xff09;、資源單元&#xff08;Unit&#xff09;和資源池&#xff…

8K、AI、低空智聯,H.266能否撐起下一代視頻通路?

一、&#x1f4c8; 爆發式增長的 AI 與視頻數據&#xff1a;智能時代的“數據燃料革命” 隨著生成式 AI、大模型推理、多模態理解等技術的迅猛發展&#xff0c;視頻數據從“記錄工具”轉變為“感知基礎設施”&#xff0c;其在現代智能系統中的戰略地位日益凸顯。 1?? 視頻數…

保姆級別IDEA關聯數據庫方式、在IDEA中進行數據庫的可視化操作(包含圖解過程)

本文以mysql為例&#xff0c;學會了Mysql&#xff0c;其它的數據庫也是類似的模版~如果您覺得這邊文章對你有幫助&#xff0c;可以收藏防止找不到~如果您覺得這篇文章不錯&#xff0c;也感謝您的點贊對我創作的支持1.1 打開側邊欄的Database2.2 選擇要連接的數據庫&#xff08;…

33.【.NET8 實戰--孢子記賬--從單體到微服務--轉向微服務】--單體轉微服務--財務服務--記賬

這篇文章我們一起把記賬模塊從單體應用遷移到微服務架構中。記賬模塊的功能想必大家都已經了解了&#xff0c;主要是記錄用戶的收入和支出&#xff0c;以及對這些記錄的刪除修改和查詢等操作。具體的功能可以參考單體應用專欄&#xff0c;在這里就不多講了。我們現在一起開始遷…

Cursor結合Playwright MCP Server支持自動化

Cursor結合Playwright MCP Server支持自動化 今天分享一下 playwright MCP Server&#xff0c;其提供了瀏覽器自動化能力&#xff0c;使大型語言模型能夠在真實的瀏覽器環境中與網頁交互&#xff0c; 也可以執行任務&#xff0c;例如運行JavaScript、截屏和導航網頁元素&…

Python 求梯形面積的程序(Program to find area of a Trapezoid)

梯形的定義&#xff1a; 梯形是凸四邊形&#xff0c;至少有一對邊平行。平行邊稱為梯形的底邊&#xff0c;另外兩條不平行的邊稱為梯形的腿。梯形也可以有兩對底邊。在上圖中&#xff0c;CD || AB&#xff0c;它們構成底邊&#xff0c;而另外兩條邊&#xff0c;即AD和BC&#…

C語言 —— 指針(4)

動態內存分配動態內存需要手動申請&#xff0c;手動歸還&#xff0c;其內存是開辟在堆區。申請的函數為&#xff1a;void *malloc(size_t size) &#xff08;需包含頭文件#include<stdlib.h>&#xff09;size&#xff1a;要分配的內存大小&#xff0c;以字節為單位。申請…

常用算法思想及模板

今天繼續整理一些關于算法競賽中C適用的一些模板以及思想。 保留x位小數 保留x位小數在C語言中可以使用printf中的"%.xf"來實現&#xff0c;但是很多C選手由于關閉了同步流&#xff0c;害怕cin、cout與scanf、printf混用容易出錯&#xff0c;所以就給大家介紹一個強…