Node.js服务器快速搭建指南:从环境配置到后台运行

作者:栖木

时间:2026-10-22

浏览:298

本文详细介绍如何在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 的高级特性以进行更复杂的开发。

总结

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对本站的支持。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章