Node.js服务器快速搭建指南:从环境配置到后台运行
本文详细介绍如何在Ubuntu环境下使用Node.js和Express框架快速搭建Web服务器。内容涵盖Node.js环境安装、npm淘宝镜像配置、Express项目生成、静态资源处理、端口监听设置以及利用nohup命令实现服务器后台运行与日志管理,帮助开发者高效完成基础服务部署。
Node.js服务器快速搭建指南:从环境配置到后台运行
前言
Node.js 是一个基于事件驱动和非阻塞 I/O 的 JavaScript 运行环境,可视为服务器端的 JavaScript 解释器。JavaScript 作为编程语言,其执行依赖于 JS 运行时虚拟机,而 I/O 能力则主要由宿主环境提供。常见的宿主环境是浏览器,而 Node.js 则是专为服务器端设计的高速 JavaScript 解释器。
近期有一个小型网站项目需要快速建立 Web 服务器。虽然 SpringMVC 是常见选择,但因其配置复杂且学习成本较高,难以快速交付,故决定尝试使用 Node.js。本教程将简要介绍如何快速启动一个轻量级的 Web 服务器,开发环境基于 Elementary OS(基于 Ubuntu 14.04)。
准备工作:安装Node.js与配置npm
1. 准备工作
1.1 安装 Node.js 环境及 npm 模块管理器
sudo apt-get install nodejs
sudo apt-get install npm
npm(Node Package Manager)是 Node.js 的官方包管理工具,能有效解决开发中第三方代码库的依赖管理问题。
1.2 配置 npm 代理
若未进行额外配置,直接使用 npm 从网络下载模块时,速度往往极慢甚至超时失败。为解决此问题,推荐使用淘宝的 npm 镜像源,可显著提升下载速度。
- 打开用户目录下的 .npmrc 配置文件
- 在文件中输入
registry = https://registry.npm.taobao.org - 保存并退出编辑器。
注意:如果此前已设置全局代理但 npm 下载速度依然缓慢,可在 ~/.npmrc 文件中追加以下配置以禁用代理:
- proxy=false
使用Express Generator构建开发环境
2. 使用 Express Generator 构建开发环境
Express 是目前基于 Node.js 最流行的 Web 开发框架,能够高效地构建具备完整功能的应用程序。
Express Generator 是 Express 的命令行应用程序生成器,利用它可以快速创建包含完整项目目录结构的初始项目。
2.1 安装 Express Generator
$ npm install express-generator -g
2.2 创建 Express 应用程序
express --view=pug NodeApp
上述命令中的 view 参数用于指定开发过程中使用的模板引擎。更多可用参数如下所示:
express -h
Usage: express [options] [dir]
Options:
-h, --help output usage information
--version output the version number
-e, --ejs add ejs engine support
--pug add pug engine support
--hbs add handlebars engine support
-H, --hogan add hogan.js engine support
-v, --view <engine> add view <engine> support (ejs|hbs|hjs|jade|pug|twig|vash) (defaults to jade)
-c, --css <engine> add stylesheet <engine> support (less|stylus|compass|sass) (defaults to plain css)
--git add .gitignore
-f, --force force on non-empty directory
2.3 处理模块依赖
进入刚创建的 NodeApp 文件夹,可以看到其中包含 package.json 文件。该文件定义了项目所需的各种模块及配置信息(如名称、版本、许可证等元数据),npm 可依据此文件管理项目模块。
打开 package.json 可查看其具体内容,例如:
{
"name": "NodeApp",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node ./bin/www"
},
"dependencies": {
"body-parser": "~1.16.0",
"cookie-parser": "~1.4.3",
"debug": "~2.6.0",
"express": "~4.14.1",
"morgan": "~1.7.0",
"pug": "~2.0.0-beta10",
"serve-favicon": "~2.3.2"
}
}
在终端执行 npm 命令以解决模块依赖。npm 会根据 package.json 的内容自动下载相应模块。需要注意的是,若未配置网络代理或镜像源,此步骤可能无法成功执行。
npm intsall
首次启动服务器与访问测试
3. 首次启动服务器
Express Generator 已自动完成大部分基础配置和逻辑代码编写,因此只需一条命令即可启动服务器。
执行以下命令:
npm start
启动后,访问 localhost:3000 即可看到 Express 的默认欢迎页面。
配置访问地址与自定义首页
4. 配置访问地址与端口
在之前创建的文件目录中,存在一个 app.js 文件,它相当于项目的入口函数(main 函数),内部集成了多个 Express 中间件及语法配置,此处不再逐一详述。
在实际生产环境中,通常需要自定义外部访问端口。例如,若需通过 HTTP 的 80 端口访问服务器,可在 app.js 文件的 "module.exports = app;" 语句前添加如下代码:
var server = app.listen(80, "0.0.0.0", function () {
console.log("服务器IP地址:" + ip.address());
var host = server.address().address;
var port = server.address().port;
console.log("应用已启动,访问地址为 http://%s:%s", host, port)
});
简要解释:80 表示服务器程序将监听本机的 80 端口,而 0.0.0.0 表示服务器将处理来自本地及外部网络的所有访问请求。
服务器启动后,终端将输出当前主机的 IP 地址以及服务器程序正在监听的访问地址。
5. 自定义首页内容
目前访问 localhost 会显示 Express 默认的欢迎页面。若希望返回自定义页面(例如 index.html),且暂不考虑静态文件托管问题,可按以下步骤操作。
进入 app.js 文件,其大致结构如下:
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var index = require('./routes/index');
var users = require('./routes/users');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');
// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', index);
app.use('/users', users);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
var server = app.listen(80, "0.0.0.0", function () {
console.log("服务器IP地址:" + ip.address());
var host = server.address().address;
var port = server.address().port;
console.log("应用已启动,访问地址为 http://%s:%s", host, port)
});
module.exports = app;
其中包含关键语句:
app.use('/', index);
该语句的含义是:当服务器接收到访问路径为 "/" 的请求时,交由 index 中间件进行处理。
关于 Express 中间件的详细说明可参考网络资料,
简而言之,中间件(middleware)是处理 HTTP 请求的函数。其核心特性是链式调用:一个中间件处理完毕后,可将请求传递给下一个中间件。App 实例运行时会依次调用多个中间件。每个中间件接收三个参数:request 对象(代表 HTTP 请求)、response 对象(代表 HTTP 响应)以及 next 回调函数(代表下一个中间件)。每个中间件可对 request 对象进行加工,并决定是否调用 next 方法将请求传递给后续中间件。
那么,index 中间件是如何定义的?
var index = require('./routes/index');
我们可以查看 routes 文件夹下的 index.js 文件,其内容大致如下:
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
module.exports = router;
从代码注释可知,此处负责返回前文提到的 Express 欢迎页面逻辑,且使用了模板引擎。为简化操作,我们直接实现自定义页面的返回需求。
首先,将 index.html 文件保存至项目目录下的 public/html 文件夹中(若不存在请自行创建)。随后,在 routes/index.js 文件中修改逻辑以返回该 HTML 页面,此处将使用文件读写相关方法。
var path = require('path');
res.sendFile(path.resolve('public/html/index.html'));
path 是 Express 中的内置模块,path.resolve 方法可将传入的相对路径转换为绝对路径。这涉及 Node.js 文件路径处理的知识,此处不再展开。
res 变量代表服务器对当前请求的响应对象。在此处,代码逻辑相当于向客户端返回位于 public/html/index.html 的文件内容。
重启服务器后,访问 localhost 即可看到自定义的 index.html 页面。
静态文件路径配置与后台运行
6. 配置静态文件路径
对于 JavaScript 和 CSS 等静态文件,Express 默认统一将其放置在 public 文件夹下。当服务器接收到对静态文件的请求时,将从 public 目录下读取并返回相应文件。
配置该路径的代码位于 app.js 中:
app.use(express.static(path.join(__dirname, 'public')));
因此,若项目有特殊需求,可自行修改该路径配置。
7. 服务器后台运行
在前文执行 npm start 命令时,终端会打印所有访问日志。若此时关闭终端,程序也将随之停止。为实现服务器后台运行并将日志写入专门文件,需使用 Linux 的 nohup 命令及重定向符。
npm start 1> log 2> error
> 是 Linux 下的重定向符。使用 > 会将输出重新写入目标文件,覆盖原有内容;若使用 >>,则会在目标文件末尾追加内容。
在 Linux 中,程序可在多个文件流上产生输出。通常将前三个文件流视为标准输入、标准输出和错误输出,Shell 内部将其标识为文件描述符 0、1 和 2。因此,该语句的作用是将标准输出重定向至当前目录下的 log 文件,将错误输出重定向至 error 文件。
然而,上述操作仅解决了输出信息的重定向问题,程序仍在终端前台运行。可使用 Linux 的 nohup 命令实现后台运行,具体用法如下:
nohup npm start 1> log 2> error &
请注意命令末尾的 & 符号,它表示将进程放入后台执行。
在后台运行作业时需谨慎:涉及用户交互的命令不宜在后台执行,否则程序会因等待输入而挂起。此外,后台作业的输出仍可能干扰当前终端工作,因此建议配合重定向符使用。
后续步骤
至此,一个简单的 Web 服务器已搭建完成。这仅是 Node.js 开发的起点,后续需深入学习 Node.js 和 Express 的高级特性以进行更复杂的开发。
总结
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对本站的支持。
NestJS 是什么?与 Express、Koa 的核心区别及选型建议
2026-11-05 13:46:41
生产环境升级 Node.js 的注意事项与兼容性测试策略
2026-11-05 09:19:24
nvm 常用命令详解:怎么平滑切换和升级 Node.js 版本
2026-11-04 09:02:34
JavaScript和JSP的根本区别:运行环境与执行机制解析
2026-11-03 23:30:18
使用nvm卸载指定版本Node.js并切换默认环境
2026-11-03 23:09:26
