在单页面应用(SPA)中,前端的页面逻辑和数据请求是通过 JavaScript 实现的,并且前端实现的是一个独立的应用。这就需要后台服务器提供数据 API 接口,前端从后台获取数据,动态渲染页面。
本文将介绍如何利用 Node.js 搭建后台服务器为前端 SPA 应用提供数据 API 接口,包括:
- 搭建 Node.js 服务器
- 利用 Express 框架模块化路由
- 请求处理中间件
- 数据库连接及数据 CRUD 操作
搭建 Node.js 服务器
const express = require('express'); const app = express(); const port = 3000; app.listen(port, () => { console.log(`Server listening at http://localhost:${port}`); });
上面是一个简单的搭建 Node.js 服务器的示例,使用了 Express 框架。
利用 Express 框架模块化路由
在大型项目中,一个 API 可能会包含多个子路由,每个子路由都有它相应的处理逻辑。利用 Express 的 Router 实现子路由的拆分和处理代码的模块化。
const express = require('express'); const router = express.Router(); router.get('/users', (req, res) => { res.send('users'); }); module.exports = router;
子路由一般保存在 routes
目录下的一个文件中,例如 users.js
文件。
// javascriptcn.com 代码示例 const express = require('express'); const app = express(); const usersRouter = require('./routes/users'); app.use('/api', usersRouter); const port = 3000; app.listen(port, () => { console.log(`Server listening at http://localhost:${port}`); });
上面是在 Node.js 服务器中使用模块化路由的示例。
请求处理中间件
在处理请求时,需要验证用户身份等操作,这些操作可以通过中间件来实现。中间件是一个类似于拦截器的函数,在请求处理前或请求处理后执行一些操作。
// javascriptcn.com 代码示例 const express = require('express'); const app = express(); const authMiddleware = (req, res, next) => { const token = req.get('Authorization'); if (token === '123456') { next(); } else { res.status(401).send('Unauthorized'); } }; app.use(authMiddleware); app.get('/api/users', (req, res) => { res.send('users'); }); const port = 3000; app.listen(port, () => { console.log(`Server listening at http://localhost:${port}`); });
上面是一个示例,需要在请求处理前验证 Authorization
头中的 token 是否正确,正确则继续请求处理,否则返回 401 状态码。
数据库连接及数据 CRUD 操作
在处理请求时,往往需要从数据库中读取数据、更新数据、删除数据等操作。Node.js 中有很多流行的数据库连接模块,比如 mysql
、mongodb
、postgres
等。
以 mysql
模块为例:
// javascriptcn.com 代码示例 const mysql = require('mysql'); const connection = mysql.createConnection({ host: 'localhost', user: 'root', password: 'password', database: 'test' }); connection.connect(); connection.query('SELECT * FROM users', (error, results, fields) => { if (error) throw error; console.log('The solution is: ', results); }); connection.end();
上面是一个使用 mysql
模块连接 MySQL 数据库的示例。
关于数据 CRUD 操作,以查询 MySQL 数据库为例:
// javascriptcn.com 代码示例 const mysql = require('mysql'); const connection = mysql.createConnection({ host: 'localhost', user: 'root', password: 'password', database: 'test' }); connection.connect(); const getUsers = () => { return new Promise((resolve, reject) => { connection.query('SELECT * FROM users', (error, results, fields) => { if (error) { reject(error); } else { resolve(results); } }); }); }; app.get('/api/users', async (req, res) => { const users = await getUsers(); res.send(users); }); connection.end();
上面是在 Express 框架中使用 mysql
模块查询 MySQL 数据库的示例。注意使用了 Promise 对象返回查询结果。
总结
通过本文,你学习了如何利用 Node.js 搭建后台服务器为前端 SPA 应用提供数据 API 接口,包括搭建 Node.js 服务器、利用 Express 框架模块化路由、请求处理中间件、数据库连接及数据 CRUD 操作等内容。在实际开发中,你可以结合自己的需求和实际情况对这些内容进行进一步的学习和应用。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6547ca617d4982a6eb22081f