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

初始化node项目express,项目结构介绍

一,初始化node项目

1、环境搭建

 验证是否安装node和npm

2、项目初始化

mkdir myNodeapp //创建node文件
cd myNodeapp //切换到当前文件目录
npm init -y

通过 npm init 命令生成 package.json 文件,它包含了项目的配置信息。

{"name": "mynodeapp", //当前项目名称"version": "1.0.0", //项目版本号"main": "index.js", //指定了项目的入口文件,当其他模块引入你的项目时,Node.js会首先加载这个文件"scripts": { //包含可运行的npm脚本"test": "echo \"Error: no test specified\" && exit 1"},"keywords": [],"author": "","license": "ISC","description": "" //用于描述项目功能
}

3、创建入口文件

在项目根目录 下创建一个 app.js 文件,这是应用的入口文件,用于设置服务器和处理请求。

4、编写简单服务器代码

const http = require('http');// 创建服务器
const server = http.createServer((req, res) => {// 设置HTTP响应的状态码和头信息res.writeHead(200, {// 设置内容类型为 HTML,并指定字符集为 UTF-8,这样中文不会乱码'Content-Type': 'text/html; charset=utf-8' });// 发送响应体res.end('<h1>Hello, World!</h1><p>这是我的第一个 Node.js 应用。</p>');
});// 监听端口
const PORT = 3000;
server.listen(PORT, () => {console.log(`Server is running on http://localhost:${PORT}`);
});

5、运行服务器

npm start

你会看到控制台输入以下信息

Server is running on http://localhost:3000

6、访问服务链接

7、添加路由

  • require('http'):加载Node.js内置的HTTP模块,主要是创建Web服务器,处理HTTP请求和响应,包含请求/响应对象、URL处理等网络通信工具
  • http.createServer() 方法就是用来创建一个 HTTP 服务器实例。
const http = require('http');const server = http.createServer((req, res) => {if (req.url === '/') {res.writeHead(200, { 'Content-Type': 'text/plain' });res.end('Welcome to the homepage!');} else if (req.url === '/about') {res.writeHead(200, { 'Content-Type': 'text/plain' });res.end('This is the about page.');} else {res.writeHead(404, { 'Content-Type': 'text/plain' });res.end('404 Not Found');}
});const PORT = 3000;
server.listen(PORT, () => {console.log(`Server is running on http://localhost:${PORT}`);
});

二,express框架创建node项目

上述是使用node创建一个简单的应用,有些人就会问了,为什么我的项目文件更多,与老师你的项目文件用法也不一样,第一要么是你自定义了自己的文件,第二要么就是用来已有的框架搭建的node项目,以上问题,我主要讲下我们常用的express框架搭建的node项目

1.全局安装 express 生成器

npm install -g express-generator

2.下面创建一个名为 myapp 的 Express 应用。

express myapp

执行上述命令会得到以下项目结构包

根据要求将终端命令目录切换到myapp,指向npm install 下载相关依赖 

3.项目依赖包安装

执行npm install 命令之后,依赖包node_modules依赖安装完成,我们还需要安装一些常用的依赖工具包

npm install nodemon mysql2 redis sequelize sqlite3
包名概述
nodemon实时重启项目
mysql2mysql数据驱动
sequelizemysql orm 操作包

4.项目启动

执行命令 npm  start 

npm start

项目启动后打开浏览器输入 http://localhost:3000效果如下

5. 启动文件修改

由于我们的www.js文件输出不带有ip地址,不太友好,打开项目根目录下的 bin/www 文件,将下方内容复制全部替换掉,其中引入了os-node内置模块,通过os.networkInterfaces()获取所有网络接口信息

#!/usr/bin/env node/*** Module dependencies.*/var app = require('../app');
var debug = require('debug')('myapp:server');
var http = require('http');
const os = require('os');/*** Get port from environment and store in Express.*/var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);/*** Create HTTP server.*/var server = http.createServer(app);/*** Listen on provided port, on all network interfaces.*/server.listen(port);
server.on('error', onError);
server.on('listening', onListening);/*** Normalize a port into a number, string, or false.*/function normalizePort(val) {var port = parseInt(val, 10);if (isNaN(port)) {// named pipereturn val;}if (port >= 0) {// port numberreturn port;}return false;
}/*** Event listener for HTTP server "error" event.*/function onError(error) {if (error.syscall !== 'listen') {throw error;}var bind = typeof port === 'string'? 'Pipe ' + port: 'Port ' + port;// handle specific listen errors with friendly messagesswitch (error.code) {case 'EACCES':console.error(bind + ' requires elevated privileges');process.exit(1);break;case 'EADDRINUSE':console.error(bind + ' is already in use');process.exit(1);break;default:throw error;}
}/*** Event listener for HTTP server "listening" event.*/function onListening() {var addr = server.address();var bind = typeof addr === 'string'? 'pipe ' + addr: 'port ' + addr.port;// 获取本地IP地址var localIP = getLocalIP();console.log('localIP',localIP);console.log(`Your app is running at http://${localIP}:${bind}`);debug('Listening on ' + bind);
}function getLocalIP() {var interfaces = os.networkInterfaces();var localIP = 'localhost';for (var devName in interfaces) {var iface = interfaces[devName];for (var i = 0; i < iface.length; i++) {var alias = iface[i];// 筛选IPv4地址,排除内部和环回地址if (alias.family === 'IPv4' && !alias.internal && alias.address !== '127.0.0.1') {// 优先选择以太网或无线网络接口if (devName.toLowerCase().includes('eth') || devName.toLowerCase().includes('wlan') ||devName.toLowerCase().includes('en')) {return alias.address;}localIP = alias.address;}}}return localIP;
}

三、node(express框架)项目结构及介绍

my-express-app/
│
├── bin/                # 启动脚本目录
│   └── www             # 应用启动文件
│
├── config/             # 配置文件目录
│   └── default.js      # 默认配置文件
│
├── controllers/        # 控制器目录,处理路由和业务逻辑
│   └── userController.js
│
├── middleware/         # 中间件目录
│   └── auth.js         # 身份验证中间件
│
├── models/             # 数据模型目录
│   └── user.js         # 用户模型
│
├── routes/             # 路由文件目录
│   └── userRoutes.js   # 用户相关路由
│
├── services/           # 服务层目录,处理复杂的业务逻辑
│   └── userService.js  # 用户服务
│
├── views/              # 视图文件目录(如果使用模板引擎)
│   └── index.ejs       # 主页视图文件
│
├── public/             # 公共资源目录,存放静态文件(如图片、CSS、JS等)
│   ├── images/
│   └── stylesheets/
│
├── node_modules/       # Node.js 依赖包
│
├── package.json        # 项目元数据和依赖管理文件
└── README.md           # 项目说明文件
  • bin/:存放启动脚本,www 文件是启动应用的入口文件,它通常用来启动 Express 服务器。
  • config/:存放配置文件,default.js 存储一些默认配置项,如数据库连接、端口等。
  • controllers/:控制器目录,负责处理路由和应用的核心业务逻辑。
  • middleware/:存放中间件文件,包含身份验证、日志记录等功能。
  • models/:数据模型目录,通常与数据库进行交互。每个模型文件通常对应数据库中的一张表。
  • routes/:路由文件目录,定义不同的 API 路由并与控制器进行关联。
  • services/:服务层,处理复杂的业务逻辑,可以调用多个控制器来完成一个请求。
  • views/:视图文件,通常与模板引擎(如 EJS、Pug)配合使用,生成动态的 HTML 页面。
  • public/:存放静态文件,如图片、样式表和前端脚本。
  • node_modules/:存放所有项目的 Node.js 依赖包。
  • package.json:管理项目依赖、脚本和项目配置。
  • README.md:项目说明文件,提供项目介绍、安装和使用文档。
http://www.dtcms.com/a/511881.html

相关文章:

  • Optuna - 自动调参利器python实例
  • 新网站做优化要准备什么合肥网站建设哪个公司做得比较好
  • 提供服务好的网站制作网站怎么做会员系统
  • 绍兴网站建设推广宁夏建设管理局网站
  • 【面向小白】git rebase全面总结,什么时候用rebase
  • Kubernates的部署(从安装到实践)
  • C++ 11
  • (一)Flutter 插件项目demo预览图
  • 两学一做 答题 网站好看到让人久久不忘的电影
  • iOS混淆实战:多工具组合完成 IPA 混淆与加固(iOS混淆|IPA加固|无源码混淆|Ipa Guard 实战)
  • 完整网站开发视频教程wordpress网页图片加载很慢
  • 软考高级-系统架构设计师历年案例专题一:软件架构设计
  • SQL入门:分页查询-原理、优化与实战
  • Linux OS文件系统资源消耗分析:系统架构与优化实践
  • 系统架构之高可用
  • C 语言编译与链接入门
  • 驾校管理系统|基于java和小程序的驾校管理系统设计与实现(源码+数据库+文档)
  • [Java数据结构与算法] 详解Map和Set接口
  • 疲劳驾驶检测提升驾驶安全 疲劳行为检测 驾驶员疲劳检测系统 疲劳检测系统价格
  • 文件上传漏洞和绕过技术
  • 网站开发协议模板单页网站怎么优化
  • MEMS电容式加速度计虚拟仿真实验
  • 第一个 Python 程序
  • AI学习-数据图片批量改名-win环境下-使用python脚本
  • “自然搞懂”深度学习系列(基于Pytorch架构)——02小试牛刀
  • 驾校陪练下单小程序
  • Agentic RAG智能体:查询改写与多轮检索
  • JavaEE初级 多线程案例(单例模式、阻塞队列、线程池、定时器)
  • 南宁网站建设优化seo主要优化
  • 网站实现留言功能吗如何建个使用自己帐户的网站