Windows安装Node.js+Express+Nodemon
陈拓 2025/4/3-2025/4/4
1. 概述
在《Node.js+Express+Nodemon+Socket.IO构建Web实时通信》
https://blog.csdn.net/chentuo2000/article/details/134651743?spm=1001.2014.3001.5502
一文中我们介绍了在Linux系统上的安装过程,本文我们在在Windows操作系统上安装Node.js、Express和Nodemon。
2. 安装Node.js
2.1 安装
- 打开你的浏览器,访问Node.js官网
https://nodejs.org/zh-cn
- 下载Node.js(LTS)
LTS(Long Term Support)版本是推荐的稳定版本,适合生产环境。
2025年4月3日,下载文件node-v22.14.0-x64.msi
- 安装Node.js
双击.msi安装文件运行安装程序。
按照安装向导的指示进行操作。你可以选择默认设置,或者根据需要自定义安装路径和组件。
- 完成安装
完成安装后,你可以在命令提示符(CMD)或PowerShell中输入node -v和npm -v来检查Node.js和npm(Node包管理器)是否正确安装。如果显示版本号,则表示安装成功。
2.2 测试
安装好node.js后可以进行以下操作进行进一步的测试。
2.2.1 以交互方式运行Javascript代码
在命令行输入node,再输入js命令:
2.2.2 以node *.js的方式运行js文件
- 进入项目目录
E:\ct\nodejs
- 写一个Javascript脚本文件test.js
notepad test.js
var num1 = 10;
var num2 = 20;
console.log(num1 + num2);
- 运行test.js:
node test.js
2.3 Node.js建立web服务器
我们用Javascript写一个Web服务器程序,在node.js上运行,就启动了一个Web服务。
2.3.1 初始化package
凡是使用npm管理的项目,都需要初始化一个package.json文件。
可以使用以下命令来初始化一个包(package就是应用程序):
npm init -y
当执行这个命令时,会生成一个npm的默认配置文件package.json。
这个默认配置文件package.json是可以更改的。
可以通过类似下面这样的形式来修改npm的默认配置:
npm config set init.author.name YOUR_NAME
npm config set init.author.email YOUR_EMAIL
当执行以上命令之后,之后再执行npm init命令时,package.json的作者姓名和邮箱都会初始化为我们设定的值。
也可以直接修改
notepad package.json
其中:
server.js是下面我们要创建的Web服务器文件。
scripts参数用于快捷启动。web-server就代表node server.js
2.3.2 写Web服务器server.js文件代码
const http = require('http');
const hostname = 'localhost';
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World');
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
在此代码示例中,我们创建了一个HTTP服务器,并在该服务器上监听3000端口。当服务器收到请求时,它将在浏览器中返回“Hello World”
2.3.3 启动服务器
node server.js
或者
npm run web-server
2.3.4 从浏览器访问服务器
3. 使用Express
Express官网:http://www.expressjs.com
Express是基于Node.js平台的快速、开放、极简的Web开发框架。
为什么要使用Express?
当我们创建服务器时,由Node.js提供的http内置模块使用复杂,开发效率低。
Express对node.js的http模块做了封装,通过Express可以使用更少的代码来实现Node.js的功能,可以极大提高开发效率。
3.1 安装Express
npm install express –-save
--save参数表示自动修改package.json文件,自动添加依赖项。
express安装到了node_modules目录下。
通常情况下,在使用 npm 或 yarn 等包管理工具安装非全局包时,默认会将这些包安装到项目根目录下的 node_modules 文件夹中。
3.2 使用express访问html静态页面
在上一节的例子中,对于浏览器的请求响应是写在server.js中的,对于复杂的网页我们写成html文件,下面用一个简单的例子演示。
在E:\ct\nodejs目录下面再创建目录public。
mkdir public
public目录通常被称为托管目录。在Node.js项目中,html、css、js、图片等静态资源都放在public目录下面。这些静态资源可以通过Express框架的express.static()中间件进行托管和访问
- 在目录public中创建一个页面index.html
notepad public/index.html
<html>
<p>Hello World!</p>
</html>
- 写服务器js文件
服务器的js文件还放在项目目录E:\ct\nodejs下面。
notepad server_express.js
写代码:
// server_express.js
const express = require('express');
const path = require('path');
const app = express();
app.use(express.static(path.join(__dirname, 'public')));
const hostname = 'localhost';
const port = 3000;
app.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
3.3 express相关代码说明
代码:
app.use(express.static(path.join(__dirname, 'public')));
说明:
在Windows系统中,我的index.html路径是E:\ct\nodejs\public\index.html,当客户端请求静态资源http://localhost:3000/时,app.use()先调用express.static(path.join(__dirname, 'public'))指定托管目录E:\ct\nodejs\public,再从目录中默认查找index.html,如果找到,返回该文件内容;否则返回 404。
1. __dirname
- __dirname是Node.js的全局变量,表示当前执行脚本所在的路径。
- 例如,如果当前脚本位于E:\ct\nodejs\server.js,那么__dirname 的值将是 E:\ct\nodejs。
2. path.join(__dirname, 'public')
- path.join() 是Node.js的path模块提供的方法,用于跨平台地拼接路径。
- path.join(__dirname, 'public') 会生成一个绝对路径,例如 E:\ct\nodejs\public,Express将请求路径 / 映射到该目录。
- 在 Windows 系统中,生成的路径分隔符是反斜杠(\),但在URL中路径分隔符是正斜杠(/)。Express内部会自动处理这种差异,确保路径匹配正确。
3. express.static()
- express.static()是Express框架内置的中间件,用于托管静态文件(如 HTML、CSS、JS、图片等)。
- 当客户端请求静态资源时,例如,当客户端请求 http://localhost:3000/ 时,express.static() 会尝试在 E:\ct\nodejs\public 目录中查找默认文件,通常是index.html,s例如E:\ct\nodejs\public\index.html。
- 如果找到匹配的文件,Express 会返回该文件的内容;如果没有找到匹配的文件,Express 会返回404错误。
4. app.use()
- app.use()是Express提供的方法,用于注册中间件。
- 在这个例子中,app.use(express.static(path.join(__dirname, 'public')))注册了express.static中间件,使其能够处理所有请求。
- 可以用多个app.use()方法注册多个中间件,构成中间件执行链。
- 当客户端发起请求(如 http://localhost:3000/)时,Express会按照中间件的注册顺序依次调用已注册的中间件。
- 如果express.static中间件处理了请求并返回了文件内容,后续的中间件将不会被调用;如果express.static中间件没有找到匹配的文件,请求会继续传递给后续的中间件。
3.4 启动服务器
node server_express.js
从浏览器访问服务器:
4. 使用Nodemon
为什么要使用Nodemon?
在编写调试Node.js项目的时候,如果修改了项目的代码,需要手动结束node.js进程,停止服务,然后再重新启动,非常繁琐。
Nodemon基于Node.js开发,是一个监视文件变化并自动重启应用程序的工具,能够监听项目中文件的变动,当代码被修改后,nodemon会帮我们自动重启项目,极大方便了开发和调试。
4.1 安装Nodemon
npm install -g nodemon
-g表示全局范围安装。
-g: 为 --global 的缩写,表示全局安装。全局安装指的是针对整个系统,而不是针对某一个项目,安装的包或者模块可以在系统中的任何地方引用。
4.2 使用Nodemon
4.2.1 监视运行中程序的改变
- 启动应用程序
nodemon server_express.js
这会启动你的应用程序,并监视相关文件的变化。
现在我们在修改server_express.js时就不用重新启动Node.js了。
例如,在打开一个命令窗口,用下面的命令修改server_express.js的代码:
notepad server_express.js
将端口设置:const port = 3000;
改为:const port = 4000;
在nodemon的运行窗口中可以看到server_express.js自动重启了:
4.2.2 更多的选项
- 指定监视文件的扩展名
nodemon --ext js,html,css app.js
通过--ext参数,你可以指定Nodemon监视的文件扩展名。
- 忽略特定文件或文件夹
nodemon --ignore public/ app.js
使用--ignore参数可以忽略指定的文件或文件夹。
- 监视子文件夹
nodemon --recursive app.js
通过--recursive参数,Nodemon可以监视子文件夹中的文件变化。
- 在控制台输出详细日志
nodemon --verbose app.js
使用--verbose参数可以打印出更多的日志信息。