javascript Express是什么_如何搭建服务器

13次阅读

express 是一个轻量级 node.js Web 框架,构建在 http 模块之上,封装路由、中间件等逻辑,不内置模板引擎或数据库支持;需通过 require(‘express’) 实例化 app 后定义路由并调用 app.listen() 启动服务。

javascript Express是什么_如何搭建服务器

Express 是什么:一个轻量级 Node.js Web 框架

Express 不是独立运行的服务器,而是构建在 http 模块之上的框架,用来简化路由、中间件、请求处理等常见任务。它本身不包含模板引擎、数据库连接或身份验证——这些都靠第三方包或你自己实现。

你写 app.get('/') 时,Express 在底层调用的是 http.createServer(),但帮你把 URL 解析、方法匹配、参数提取这些重复逻辑封装好了。

npm 初始化并启动最简 Express 服务器

确保已安装 node.js(v18+ 推荐),然后执行:

npm init -y npm install express

新建 server.js

立即学习Java免费学习笔记(深入)”;

const express = require('express'); const app = express(); const PORT = process.env.PORT || 3000;  app.get('/', (req, res) => {   res.send('Hello from Express!'); });  app.listen(PORT, () => {   console.log(`Server running on http://localhost:${PORT}`); });

运行:node server.js。访问 http://localhost:3000 就能看到响应。

  • 别漏掉 require('express')express() 实例化,否则 app.get 会报 TypeError: Cannot read Property 'get' of undefined
  • app.listen() 必须在所有路由定义之后调用,否则路由不会生效
  • 开发时建议加 nodemon 自动重启:npm install -D nodemon,然后用 npx nodemon server.js

常见错误:为什么浏览器打不开 / 显示空白 / 报 EADDRINUSE

三个高频问题对应三种不同原因:

  • EADDRINUSE :::3000:端口被占用。改端口(如 3001)或杀掉进程:lsof -i :3000macos/linux)或 netstat -ano | findstr :3000windows
  • 浏览器空白但控制台显示 “Server running…”:检查是否忘了调用 res.send()res.json()res.end() —— Express 不会自动结束响应,挂起连接会导致超时
  • 访问 /api/users 返回 404:确认路由路径和 HTTP 方法完全匹配,app.post('/api/users') 不会响应 GET 请求

加中间件前先理解 next() 的作用

中间件函数必须调用 next(),否则请求会卡住。比如日志中间件:

app.use((req, res, next) => {   console.log(`${new Date().toISOString()} ${req.method} ${req.url}`);   next(); // ⚠️ 这行不能少 });

静态文件服务也依赖中间件:

app.use(express.static('public')); // 会自动 serve public/index.html
  • express.json()express.urlencoded({ extended: true }) 必须在使用 req.body 前注册,否则 req.bodyundefined
  • 自定义中间件里抛出错误(next(new Error('xxx')))会被 Express 默认错误处理器捕获,但生产环境应替换为自定义错误处理中间件
  • 路由级中间件只对匹配路径生效,比如 app.get('/user', authMiddleware, handler) 中的 authMiddleware 只跑在该路由

实际项目里,Express 的“轻量”既是优势也是陷阱:它不约束你如何组织代码,结果很多人把所有路由、DB 连接、配置全塞进一个 server.js —— 等到加个登录、连个 MongoDB、再套层 JWT,结构就失控了。拆分路由、抽离配置、提前规划错误流,比选什么 ORM 更早该考虑。

text=ZqhQzanResources