建立商城简单后台的过程
给自己的小商城建立简单后台的过程
使用到的工具
- 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
 12- server.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
 3- server.on("request", function (req, res) { 
 console.log(req.url);
 });
- 我们可以这么设计:在 url 中写下功能含义,比方说前台请求这个接口
- 如何给前台发送数据 - 可以通过res.write返回,只能返回Buffer和String
- res.end()说明服务结束,如果不写他的话前台会收不到数据的
- 如果想要返回复杂数据类型,比方说对象,数据,可以通过res.write(JSON.stringify(要返回的复杂数据))来返回数据
 - 1 
 2
 3
 4
 5- server.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のいえ!
 评论





