当前位置: 首页 > news >正文

快速搭建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.dtcms.com/a/308012.html

相关文章:

  • python制作的软件工具安装包
  • c# net6.0+ 安装中文智能提示
  • 前端框架Vue3(二)——Vue3核心语法之OptionsAPI与CompositionAPI与setup
  • 超体积指标(Hypervolume Indicator,S 度量)详析
  • 【JMeter】性能测试脚本录制及完善
  • 辐射源定位方法简述
  • 【BUUCTF系列】[HCTF 2018]WarmUp1
  • 网络编程-IP
  • 计算机网络:什么是光猫
  • Hyperbrowser MCP:重新定义网页抓取与浏览器自动化的AI驱动工具
  • Solr升级9.8.0启动异常UnsupportedOperationException known Lucene classes
  • Tauri vs Electron 的全面对比
  • 生产管理升级:盘古IMS MES解锁全链路可控可溯,激活制造效率
  • LCM中间件入门(2):LCM核心实现原理解析
  • 牛客练习赛142 第四次忍界大战 并查集
  • 永磁同步电机无速度算法--直流误差抑制自适应二阶反推观测器
  • Gemini Fullstack LangGraph Quickstart(DeepSeek+Tavily版本)
  • 【React】diff 算法
  • Elasticsearch 索引及节点级别增删改查技术
  • 基于单片机胎压检测/锅炉蒸汽压力/气压检测系统
  • VBA代码解决方案第二十七讲:禁用EXCEL工作簿右上角的关闭按钮
  • 分布式ID方案(标记)
  • TDengine oss数据的导出和导入
  • 大数据岗位技能需求挖掘:Python爬虫与NLP技术结合
  • 学习Redis源码路径
  • 开发避坑短篇(12):达梦数据库TIMESTAMP字段日期区间查询实现方案
  • 打破数据质量瓶颈:用n8n实现30秒专业数据质量报告自动化
  • 【数据结构初阶】--二叉树选择题专辑
  • 《Spring Boot应用工程化提升:多模块、脚手架与DevTools》
  • leetcode 2683. 相邻值的按位异或 中等