Express框架是Node.js生态系统中的一种流行的Web应用程序框架。其核心功能主要包括以下几个方面:
安装 Express 并将其保存到依赖列表中:
[root@node3 nodejs]# cnpm install express --save
以上命令会将 Express 框架安装在当前目录的 node_modules 目录中, node_modules 目录下会自动创建 express 目录。以下几个重要的模块是需要与 express 框架一起安装的:
[root@node3 nodejs]# cnpm install body-parser --save
[root@node3 nodejs]# cnpm install cookie-parser --save
[root@node3 nodejs]# cnpm install multer --save
安装完后,我们可以查看下 express 使用的版本号:
[root@node3 nodejs]# cnpm list express
helloworld@1.0.0 /root/nodejs
└── express@4.18.2 -> ./node_modules/.store/express@4.18.2/node_modules/express
[root@node3 nodejs]# cnpm list
helloworld@1.0.0 /root/nodejs
├── accepts@1.3.8 extraneous
├── array-flatten@1.1.1 extraneous
├── body-parser@1.20.2 -> ./node_modules/.store/body-parser@1.20.2/node_modules/body-parser
├── bytes@3.1.2 extraneous
├── call-bind@1.0.2 extraneous
├── content-disposition@0.5.4 extraneous
├── content-type@1.0.5 extraneous
├── cookie-parser@1.4.6 -> ./node_modules/.store/cookie-parser@1.4.6/node_modules/cookie-parser
├── cookie-signature@1.0.6 extraneous
├── cookie@0.5.0 extraneous
├── debug@2.6.9 extraneous
├── depd@2.0.0 extraneous
├── destroy@1.2.0 extraneous
├── ee-first@1.1.1 extraneous
├── encodeurl@1.0.2 extraneous
├── escape-html@1.0.3 extraneous
├── etag@1.8.1 extraneous
├── express@4.18.2 -> ./node_modules/.store/express@4.18.2/node_modules/express
├── finalhandler@1.2.0 extraneous
├── forwarded@0.2.0 extraneous
├── fresh@0.5.2 extraneous
├── function-bind@1.1.1 extraneous
├── get-intrinsic@1.2.1 extraneous
├── has-proto@1.0.1 extraneous
├── has-symbols@1.0.3 extraneous
├── has@1.0.4 extraneous
├── http-errors@2.0.0 extraneous
├── iconv-lite@0.4.24 extraneous
├── ipaddr.js@1.9.1 extraneous
├── media-typer@0.3.0 extraneous
├── merge-descriptors@1.0.1 extraneous
├── methods@1.1.2 extraneous
├── mime-db@1.52.0 extraneous
├── mime-types@2.1.35 extraneous
├── mime@1.6.0 extraneous
├── ms@2.0.0 extraneous
├── multer@1.4.5-lts.1 -> ./node_modules/.store/multer@1.4.5-lts.1/node_modules/multer
├── mysql@2.18.1
├── negotiator@0.6.3 extraneous
├── object-inspect@1.12.3 extraneous
├── on-finished@2.4.1 extraneous
├── parseurl@1.3.3 extraneous
├── path-to-regexp@0.1.7 extraneous
├── proxy-addr@2.0.7 extraneous
├── qs@6.11.0 extraneous
├── range-parser@1.2.1 extraneous
├── raw-body@2.5.1 extraneous
├── safe-buffer@5.2.1 extraneous
├── safer-buffer@2.1.2 extraneous
├── send@0.18.0 extraneous
├── serve-static@1.15.0 extraneous
├── setprototypeof@1.2.0 extraneous
├── side-channel@1.0.4 extraneous
├── statuses@2.0.1 extraneous
├── toidentifier@1.0.1 extraneous
├── type-is@1.6.18 extraneous
├── unpipe@1.0.0 extraneous
├── utils-merge@1.0.1 extraneous
└── vary@1.1.2 extraneous
创建 express_demo.js 文件,代码如下所示:
const express = require('express');
const app = express();
app.use(express.json()); // 支持JSON格式的请求体
// 定义一个用户路由
app.get('/users', (req, res) => {
// 处理获取用户列表的请求
const users = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
{ id: 3, name: 'Charlie' },
];
res.json(users);
});
app.get('/users/:id', (req, res) => {
// 处理获取特定用户信息的请求
const userId = req.params.id;
const user = { id: userId, name: `User ${userId}` };
res.json(user);
});
app.post('/users', (req, res) => {
// 处理创建新用户的请求
const newUser = req.body;
// 在这里执行保存用户到数据库等操作
res.status(201).json({ message: 'User created successfully.' });
});
// 启动应用程序监听端口
app.listen(3000, () => {
console.log('API接口已启动,监听端口3000...');
});
执行以上代码:
$ node express_demo.js
应用实例,访问地址为 API接口已启动,监听端口3000...
在浏览器中访问 http://127.0.0.1:3000,结果如下图所示:

创建 logger.js 文件,代码如下所示:
const express = require('express');
const app = express();
// 定义一个简单的中间件
const loggerMiddleware = (req, res, next) => {
console.log(`Request URL: ${req.url}`);
next(); // 调用next函数以继续处理链
};
// 将中间件应用到应用程序中
app.use(loggerMiddleware);
// 定义一个路由
app.get('/', (req, res) => {
res.send('Hello, World!');
});
// 启动应用程序监听端口
app.listen(3001, () => {
console.log('应用程序已启动,监听端口3001...');
});
在上面的示例中,我们定义了一个简单的中间件loggerMiddleware,它在每个请求被处理之前记录请求的URL。通过app.use()方法,我们将中间件应用到应用程序中。当一个请求到达应用程序时,它会首先通过中间件,然后再到达路由处理函数。
请注意,中间件函数通常接受三个参数:req(请求对象),res(响应对象)和next(下一个中间件函数)。中间件可以通过调用next()函数将控制权传递给下一个中间件或路由处理函数。
执行以上代码:
[root@node3 nodejs]# pm2 start logger.js --watch
[PM2] Starting /root/nodejs/logger.js in fork_mode (1 instance)
[PM2] Done.

在浏览器中访问 http://127.0.0.1:3001,结果如下图所示:

6|logger | 应用程序已启动,监听端口3000...
6|logger | Request URL: /
6|logger | Request URL: /favicon.ico
要在Node.js中连接MySQL数据库,你可以使用mysql模块。首先,确保你已经安装了Node.js和MySQL服务器,并且数据库已经设置好并正在运行。你可以通过以下步骤在Node.js中连接MySQL数据库:
mysql模块:在命令行中运行以下命令来安装mysql模块:npm install mysql
mysql模块:在你的Node.js代码中,导入mysql模块并创建一个数据库连接。const mysql = require('mysql');
// 创建数据库连接
const connection = mysql.createConnection({
host: 'localhost', // MySQL服务器地址
user: 'your_username', // MySQL用户名
password: 'your_password', // MySQL密码
database: 'your_database' // 要连接的数据库名称
});
// 连接数据库
connection.connect((err) => {
if (err) {
console.error('连接数据库失败:', err);
return;
}
console.log('成功连接到数据库');
});
// 关闭数据库连接
connection.end();
数据库操作
website.sql
SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for `websites`
-- ----------------------------
DROP TABLE IF EXISTS `websites`;
CREATE TABLE `websites` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` char(20) NOT NULL DEFAULT '' COMMENT '站点名称',
`url` varchar(255) NOT NULL DEFAULT '',
`alexa` int(11) NOT NULL DEFAULT '0' COMMENT 'Alexa 排名',
`country` char(10) NOT NULL DEFAULT '' COMMENT '国家',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of `websites`
-- ----------------------------
BEGIN;
INSERT INTO `websites` VALUES ('1', 'Google', 'https://www.google.cm/', '1', 'USA'), ('2', '淘宝', 'https://www.taobao.com/', '13', 'CN'), ('3', '菜鸟教程', 'http://www.runoob.com/', '4689', 'CN'), ('4', '微博', 'http://weibo.com/', '20', 'CN'), ('5', 'Facebook', 'https://www.facebook.com/', '3', 'USA');
COMMIT;
SET FOREIGN_KEY_CHECKS = 1;
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '123456',
port: '3306',
database: 'test'
});
connection.connect();
var sql = 'SELECT * FROM websites';
//查
connection.query(sql,function (err, result) {
if(err){
console.log('[SELECT ERROR] - ',err.message);
return;
}
console.log('--------------------------SELECT----------------------------');
console.log(result);
console.log('------------------------------------------------------------\n\n');
});
connection.end();
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '123456',
port: '3306',
database: 'test'
});
connection.connect();
var addSql = 'INSERT INTO websites(Id,name,url,alexa,country) VALUES(0,?,?,?,?)';
var addSqlParams = ['菜鸟工具', 'https://c.runoob.com','23453', 'CN'];
//增
connection.query(addSql,addSqlParams,function (err, result) {
if(err){
console.log('[INSERT ERROR] - ',err.message);
return;
}
console.log('--------------------------INSERT----------------------------');
//console.log('INSERT ID:',result.insertId);
console.log('INSERT ID:',result);
console.log('-----------------------------------------------------------------\n\n');
});
connection.end();
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '123456',
port: '3306',
database: 'test'
});
connection.connect();
var modSql = 'UPDATE websites SET name = ?,url = ? WHERE Id = ?';
var modSqlParams = ['菜鸟移动站', 'https://m.runoob.com',6];
//改
connection.query(modSql,modSqlParams,function (err, result) {
if(err){
console.log('[UPDATE ERROR] - ',err.message);
return;
}
console.log('--------------------------UPDATE----------------------------');
console.log('UPDATE affectedRows',result.affectedRows);
console.log('-----------------------------------------------------------------\n\n');
});
connection.end();
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '123456',
port: '3306',
database: 'test'
});
connection.connect();
var delSql = 'DELETE FROM websites where id=6';
//删
connection.query(delSql,function (err, result) {
if(err){
console.log('[DELETE ERROR] - ',err.message);
return;
}
console.log('--------------------------DELETE----------------------------');
console.log('DELETE affectedRows',result.affectedRows);
console.log('-----------------------------------------------------------------\n\n');
});
connection.end();
