Node.js® 是一个基于 Chrome V8 引擎 的 JavaScript 运行时,它提供了许多基础的功能和 API,而基于 Node.js,程序员实现了很多强大的工具和框架。总之,Node.js 是大前端时代的“大宝剑”,有了 Node.js 这个超级 buff 的加持,前端程序员的行业竞争力会越来越强!
-
后端API接口。基于Node.js环境 + Express框架,
-
桌面应用。基于Node.js环境 + Electron 框架
-
操作数据库。基于Node.js环境 + MySql包 读写和操作数据库
-
实用的命令行工具。基于Node.js环境,实现的 vuecli,webpack等
-
etc...
Express 是一个基于 Node.js 平台,快速、开放、极简的 web 开发框架
-
web 开发: 对不同的请求能够显示页面;提供接口服务;
-
框架是一个半成品,用来快速解决一类问题;框架:bootstrap, lay-ui, express, vue;
-
库就是工具集,通过调用api来完成具体的功能。 库:zepto.js , jQuery, day.js, , react ,underscore, lodash, art-template, axios, echart.....
-
对于node.js来说,Express 是一个第三方模块,有丰富的 API 支持,强大而灵活的中间件特性
-
Express 不对 Node.js 已有的特性进行二次抽象,只是在它之上扩展了 Web 应用所需的基本功能
运行express程序
expresss 是一个第三方模块(在npm上可以下载),在使用它之前要先去下载它,在下载包之前要先创建项目,并通过终端命令npm init 创建package.json文件(终端命令的使用可参考本人之前的文章)。
注意:
-
项目目录名字不要取中文,也不要取
express
-
如果安装不成功:
-
换个网络环境
-
运行下
npm cache clean -f
,再重新运行下载命令试试
-
基本使用
// 加载 Express
const express = require('express')
// 1. 调用 express() 得到一个 app
//app是 express 实例
// 类似于 http.createServer()
const app = express();
// 2. 静态资源托管
app.use(express.static('public'))
// 3. 监听端口号,启动 Web 服务
app.listen(3000, () => console.log('app listening on port 3000!'))
路由和接口
路由(Routing)是一组映射关系。它约定了当一个特定的 HTTP 方法(GET、POST 等)访问某个 URL(或者叫路径标识)时,服务器如何响应,而接口就是一种特殊的路由。
- 写get接口
- 要求
//---- 不传入id ------------- // localhost:8080/api/getbooks { "status": 0, //0标识成功,其他失败 "message": "获取图书列表数据成功", //描述信息 "data": [{ //返回数据 "id": 1, //图书id "bookname": "西游记", //书名 "author": "吴承恩", //作者 "publisher": "北京出版社" //出版社 }, { "id": 2, //图书id "bookname": "红楼梦", //书名 "author": "曹雪芹", //作者 "publisher": "大清出版社" //出版社 }] } //---- 传入id ------------- // localhost:8080/api/getbooks?id=1 { "status": 0, //0标识成功,其他失败 "message": "获取图书数据成功", //描述信息 "data": { //返回数据 "id": 1, //图书id "bookname": "西游记", //书名 "author": "吴承恩", //作者 "publisher": "北京出版社" //出版社 } } // localhost:8080/api/getbooks?id=100 { "status": 1, //0标识成功,其他失败 "message": "获取图书数据失败" }
参考代码
const express = require('express') const app = express() let data = { "status": 0, //0标识成功,其他失败 "message": "获取图书列表数据成功", //描述信息 "data": [{ //返回数据 "id": 1, //图书id "bookname": "西游记", //书名 "author": "吴承恩", //作者 "publisher": "北京出版社" //出版社 }, { "id": 2, //图书id "bookname": "红楼梦", //书名 "author": "曹雪芹", //作者 "publisher": "大清出版社" //出版社 }] } let books = [{ //返回数据 "id": 1, //图书id "bookname": "西游记", //书名 "author": "吴承恩", //作者 "publisher": "北京出版社" //出版社 }, { "id": 2, //图书id "bookname": "红楼梦", //书名 "author": "曹雪芹",//作者 "publisher": "大清出版社" //出版社 }] // 定义路由 // app.METHOD(PATH, HANDLER) app.get('/api/getbooks', (req, res) => { //console.log(req.query);//获取参数 if (req.query.id !== undefined) {//如果可以获取到id // 做查询(数组里的find方法,查找首次满足条件的值,并返回值) const ret = books.find(item => item.id == req.query.id) if (ret) { res.json({ "status": 0, //0标识成功,其他失败 "message": "获取图书数据成功", //描述信息 "data": ret }) } else { res.json({ "status": 1, //0标识成功,其他失败 "message": "获取图书数据失败" }) } } else {//如果获取不到id // 返回数据,send也行 res.json(data) } })
post代码见下一篇