建立商城简单后台的过程
给自己的小商城建立简单后台的过程
使用到的工具
Node.js
Node.js
既不是框架,也不是个语言,他是一个平台,可以运行JavaScript
语言,没有 Dom、Bom- 模块作用域:也就是一个文件对应一个作用域
MongoDB
- 非关系型数据库,跟
Node.js
是个不错的好基友
- 非关系型数据库,跟
Mongoose
这里简单介绍,我会看一个新的板块去整理这些工具的知识
安装 Node 和 数据库 Mongo
Node.js
- 官网地址:https://nodejs.org/zh-cn/
- 安装的时候一直 Next 即可
MongoDB
- 官网地址:https://www.mongodb.com/
- 可能有网络问题,请使用魔法,科学上网 =_ =
Mongoose
- 在 cmd 中执行命令
1
npm install mongoose
建立 http 服务
简单的 http 服务
主要的逻辑是
- 创建
http
服务 - 监听
request
请求 - 监听端口,开启服务
新建xxx.js
文件
1 | // 最简单的服务搭建 |
发送和获取数据
我们最关心的问题应该有一下几点
如何获取前台发送给后台的数据?
- 通过
req.on('data',function(){})
1
2
3
4
5
6
7
8
9
10
11
12server.on("request", function(req, res) {
req.on('data', function(chunk) {
// console.log(chunk)
// 接收过来的chunk就是前台发来的
// 但是,chunk是二进制编码
// JSON.parse() 方法用于将一个 JSON 字符串转换为对象。
// 前台传数组也可以“
// 但是前台如果直接传字符串的话就不能用json.parse了
console.log(JSON.parse(chunk));
}
})- 如果前台发来的是字符串,那么可以通过
chunk.toString()
可以转化成人能看懂的字 - 如果前台发来的是数据,对象等复杂数据类型的时候,那么可以
JSON.parse(chunk)
转化一下
- 通过
如何知道前台请求的是什么服务/功能?
- 我们可以这么设计:在 url 中写下功能含义,比方说前台请求这个接口
url:'http://127.0.0.1:3000/addUser'
,那我们直接获取addUser
就可以了 - 通过在监听服务里获取
req.url
即可知道前台请求的 url 后缀写的什么了,然后通过后缀写不同的功能
1
2
3server.on("request", function (req, res) {
console.log(req.url);
});- 我们可以这么设计:在 url 中写下功能含义,比方说前台请求这个接口
如何给前台发送数据
- 可以通过
res.write
返回,只能返回Buffer
和String
res.end()
说明服务结束,如果不写他的话前台会收不到数据的- 如果想要返回复杂数据类型,比方说对象,数据,可以通过
res.write(JSON.stringify(要返回的复杂数据))
来返回数据
1
2
3
4
5server.on("request", function (req, res) {
// res.write('保存失败')
res.write(JSON.stringify());
res.end();
});- 可以通过
我的整个设计如下
1 | const http = require("http"); |
数据库操作
建立表结构
虽然Mongo
是非关系型数据库,但是也是需要设计一下,不然咱增删改查也费劲啊
在Mongo
中有个叫架构Schema
的东西,专门用来约束数据,其目的是:保证数据的完整性,减少脏数据
举个例子
1 | // 引入Schema |
可以看到Schema
规定了每条数据的架构,其中如果有不可缺少项,比如上面的title
,可以通过required:true
来约束
将架构发布为模型并挂载给外部
Q: 既然是模块作用域,那如何让模块与模块之间进行通信?
加载文件模块的目的更重要的是为了使用里面的成员
1 | // 将架构发布为模型,并挂载,以便于外部使用 |
这里介绍一下module.exports
,把所有需要被外部访问的成员挂在到 exports 上
比方说有两个文件,分别是a.js
,b.js
,如果想在a
文件中使用b
文件的内容,就需要把b
文件暴露出来
1 | // a.js |
1 | //b.js |
问题
Q1:后台不能传递复杂数据类型给前台
1 | // res.end 只支持字符串或者buffer |
Q2:敲代码的技巧:批量删除代码前面的 tab
shift + tab
Q3:提示 Cannot find module ‘mongoose’
安装 mongoose
即可,这个插件是在运行的文件夹下的
就是说如果文件换了路径,也需要重新导入module
1 | // 我用的是淘宝镜像,爽的 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Rubyのいえ!
评论