NodeJS美食分享平台 -计算机毕业设计源码96768

摘 要

NodeJS美食分享平台的研究旨在设计和开发一个方便、实用的平台,以促进用户之间的美食分享和交流。该平台提供用户上传、搜索、收藏和评论等功能,为用户提供丰富多样的美食资源和社区互动。NodeJS美食分享平台利用基于MVVM模式进行开发,采用B/S模式,后端部分基于node.js进行开发,在功能上分为前台和后台管理两个部分。前台主要为顾客提供美食资讯浏览、菜谱信息、菜品笔记、食材商城、通知公告。后台主要是为管理员提供系统用户、系统管理、菜谱分类管理、菜谱信息管理、菜品笔记管理、食材商城管理、购买订单管理等功能。

关键词:菜谱信息;NodeJS;美食分享平台

Abstract

The research on NodeJS food sharing platform aims to design and develop a convenient and practical platform to promote food sharing and communication among users. This platform provides users with functions such as uploading, searching, bookmarking, and commenting, providing users with rich and diverse food resources and community interaction. The NodeJS food sharing platform is developed using the MVVM model and adopts the B/S model. The backend part is developed based on node.js, and is divided into two parts in terms of functionality: front-end and back-end management. The front desk mainly provides customers with food information browsing, recipe information, dish notes, ingredient stores, and notification announcements. The backend mainly provides system users, system management, recipe classification management, recipe information management, dish note management, ingredient mall management, purchase order management and other functions for administrators.

Keywords: recipe information; NodeJS; Food sharing platform

目  录

一、 绪论

(一) 研究背景与意义

(二) 国内外研究现状和发展趋势

(三) 本文的组织结构

二、 开发工具及相关技术介绍

(一)node.js主要功能

(二)MySQL数据库

三、 系统分析

(一) 可行性分析

1. 经济可行性

2. 技术可行性

3. 操作可行性

(二) 功能性需求分析

(三) 非功能性需求分析

四、 系统设计

(一) 功能模块设计

(二) 数据库设计

1. 概念模型设计

2. 数据库表设计

五、 系统实现

(一) 用户功能实现

1. 注册界面

2. 登录界面

3. 首页的实现

4. 菜谱信息的实现

5. 菜品笔记的实现

6. 食材商城的实现

(二) 后端管理员主要功能实现

1. 系统用户的实现

2. 通知公告管理的实现

3. 菜谱分类管理的实现

4. 菜品笔记管理的实现

5. 食材商城管理的实现

6. 购买订单管理的实现

六、 系统测试

(一) 系统可靠性测试

(二) 系统功能性测试

(三) 系统合格性测试

(四) 测试结果

七、 总结与展望

参考文献

致谢

  • 研究背景与意义

随着人们对健康饮食和美食的关注度不断提高,饮食文化越来越受到重视。越来越多的人开始热衷于尝试新的美食和分享自己的独特创意。社交媒体的普及使得人们更加乐于分享自己的生活经验,包括烹饪和食物方面。人们希望有一个专门的平台来分享自己的美食创意和获得他人的灵感。微信小程序作为一种轻量级、便捷的应用形式,逐渐流行起来。它无需下载额外的应用程序,满足用户快速获取信息和进行互动的需求。传统上,寻找新的美食往往需要阅读大量的书籍或浏览多个网站,费时费力。缺乏一个集中的平台,使用户能够轻松地搜索、发布和收藏各种美食。

促进美食文化传播:美食分享平台为用户提供了一个集中的平台,可以方便地分享、浏览和获取各种美食美食。这有助于促进美食文化的传播,鼓励人们尝试新的烹饪方法和创意,丰富饮食文化。提供灵感与交流平台:通过美食分享平台,用户可以互相借鉴和学习他人的烹饪经验和创意。这种灵感的交流和互动可以激发用户的创造力,推动美食创新和变革。方便快捷的美食获取:传统上,寻找新的美食往往需要阅读大量的书籍或浏览多个网站,费时费力。而NodeJS美食分享平台提供了一个集中的平台,用户可以轻松地搜索、发布和收藏各种美食,提供便捷快速的美食获取方式。

  • 国内外研究现状和发展趋势

国内研究现状:

Node.js以其高效的异步I/O和事件驱动模型,在美食分享平台开发中得到了广泛应用。开发者可以利用Node.js快速搭建出高性能、高并发的Web应用,满足大量用户的实时访问需求。国内的美食分享平台不仅提供基本的菜谱分享、食材购买等功能,还结合了社交元素,如用户评价、交流互动等,极大地提升了用户的使用体验。随着人们生活水平的提高和饮食观念的转变,美食分享平台的市场竞争日趋激烈。各大平台纷纷推出各种优惠活动、特色功能等,以吸引更多用户。随着用户数量的增加,数据安全和隐私保护成为了美食分享平台必须面对的问题。国内平台在数据存储、传输、使用等方面采取了多种安全措施,确保用户信息的安全。

国外研究现状:

国外在Node.js技术的研发和应用方面相对领先,为美食分享平台提供了更为稳定、高效的技术支持。国外的美食分享平台注重个性化、专业化服务,如针对素食主义者、健身人士等特定群体的特色菜谱分享等,满足了不同用户的需求。国外的美食分享平台往往具有浓厚的社区文化,用户之间可以相互交流、分享经验,形成了良好的社区氛围。国外的美食分享平台通常支持多种语言,吸引了全球各地的用户参与,实现了美食文化的国际化传播。

总的来说,Node.js美食分享平台在国内外都呈现出蓬勃发展的态势。随着技术的不断进步和市场的不断扩大,美食分享平台将继续为用户提供更加便捷、丰富的服务体验。

  • 本文的组织结构

第一章是绪论,本文章的开头部分,对本题目的研究背景和研究意义等一些做文字性的描述。

第二章研究了NodeJS美食分享平台的所采用的开发技术和开发工具。

第三章是系统分析部分,包括系统总体需求描述、功能性角度分析系统需求、非功能性等各个方面分析系统是否可以实现。

第四章是系统设计部分,本文章的重要部分,提供了系统架构的详细设计和一些主要功能模块的设计说明。

第五章是系统的具体实现,介绍系统的各个模块的具体实现。

第六章在前几章的基础上对系统进行测试和运行。

最后对系统进行了认真的总结,以此对未来有一个新的展望。

  • 开发工具及相关技术介绍

(一)node.js主要功能

V8引擎本身使用了一些最新的编译技术。这使得用Javascript这类脚本语言编写出来的代码运行速度获得了极大提升,又节省了开发成本。对性能的苛求是Node的一个关键因素。 Javascript是一个事件驱动语言,Node利用了这个优点,编写出可扩展性高的服务器。Node采用了一个称为“事件循环(event loop)”的架构,使得编写可扩展性高的服务器变得既容易又安全。提高服务器性能的技巧有多种多样。Node选择了一种既能提高性能,又能减低开发复杂度的架构。这是一个非常重要的特性。并发编程通常很复杂且布满地雷。Node绕过了这些,但仍提供很好的性能。

Node采用一系列“非阻塞”库来支持事件循环的方式。本质上就是为文件系统、数据库之类的资源提供接口。向文件系统发送一个请求时,无需等待硬盘(寻址并检索文件),硬盘准备好的时候非阻塞接口会通知Node。该模型以可扩展的方式简化了对慢资源的访问, 直观,易懂。尤其是对于熟悉onmouseover、onclick等DOM事件的用户,更有一种似曾相识的感觉。

虽然让Javascript运行于服务器端不是Node的独特之处,但却是其一强大功能。不得不承认,浏览器环境限制了我们选择编程语言的自由。任何服务器与日益复杂的浏览器客户端应用程序间共享代码的愿望只能通过Javascript来实现。虽然还存在其他一些支持Javascript在服务器端 运行的平台,但因为上述特性,Node发展迅猛,成为事实上的平台。

在Node启动的很短时间内,社区就已经贡献了大量的扩展库(模块)。其中很多是连接数据库或是其他软件的驱动,但还有很多是凭他们的实力制作出来的非常有用的软件。

最后,不得不提到的是Node社区。虽然Node项目还非常年轻,但很少看到对一个项目如此狂热的社区。不管是新手,还是专家,大家都围绕着项目,使用并贡献自己的能力,致力于打造一个探索、支持、分享、听取建议的乐土。

二)MySQL数据库

Mysql的语言是非结构化的,用户可以在数据上进行工作。MySQL因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。并且因为Mysql的语言和结构比较简单,但是功能和存储信息量很强大,所以得到了普遍的应用。

Mysql数据库在编程过程中的作用是很广泛的,为用户进行数据查询带来了方便。Mysql数据库的应用因其灵活性强,功能强大,所以在实现某功能时只需要一小段代码,而不像其他程序需要编写大段代码。总体来说,Mysql数据库的语言相对要简洁很多。

数据流程分析主要就是数据存储的储藏室,它是在计算机上进行的,而不是现实中的储藏室。数据的存放是按固定格式,而不是无序的,其定义就是:长期有固定格式,可以共享的存储在计算机存储器上。数据库管理主要是数据存储、修改和增加以及数据表的建立。为了保证系统数据的正常运行,一些有能力的处理者可以进行管理而不需要专业的人来处理。数据表的建立,可以对数据表中的数据进行调整,数据的重新组合及重新构造,保证数据的安全性。介于数据库的功能强大等特点,本系统的开发主要应用了Mysql进行对数据的管理。

  • 系统分析

本系统将在经济、技术、操作这三个角度上进行可行性分析。

  1. 经济可行性

整个系统从设计到开发以及测试过程严谨步骤齐全,所有工作任务全部由本人完成,并未获取外部技术支持,节约了一切服务成本开销以及人工成本,在硬件方面,为节约成本使用一台二手移动工作站作为项目部署服务器以及数据库服务器,成本在一万元一下,真个网络部署也是由本人独立完成不涉及到其他人工费用,整个开发过程本着低成本,低消耗的原则。

  1. 技术可行性

技术可行性分析的目的是确认该系统能否利用现有技术实现,并评估开发效率和完成情况。技术的可行性是指在当前的技术条件下,计算机软件和硬件的开发是否能够满足发展的要求。因为该系统的开发基于Koa框架,所以开发该系统所需的软件和硬件条件可以在普通计算机上满足。因为它占用的内存相对较少,所以用Mysql数据库开发和设计软件理论上没有问题,因为它占用的内存太少。上述技术可以有效地保证系统的成功和高效开发。

  1. 操作可行性

NodeJS美食分享平台的使用界面简单易于操作,采用常见的界面窗口来登录界面,通过电脑进行访问操作,用户只要平时使用过电脑都能进行访问操作。此系统的开发采用Java技术开发,人性化和完善化是B/S结构开发比较显要的特点使得用户操作相比较其他更加简洁方便。易操作、易管理、交互性好在本系统操作上体现得淋漓尽致。

  • 功能性需求分析

前台需求:

(1)注册登录:主要包括用户的注册和登陆、用户个人信息管理等功能。

(2)菜谱信息模块:用户可以根据关键词所搜菜谱信息,点击感兴趣的菜谱信息进行查看,也可以点赞、收藏和评论。

(3)菜品笔记模块:用户可以根据关键词所搜菜品笔记,点击感兴趣的菜品笔记进行查看,也可以点赞、收藏和评论。

(4)食材商城模块:用户可以根据关键词所搜食材信息,点击感兴趣的食材进行查看,也可以点赞、收藏和评论,也可以点击“购买”。

(5)通知公告:用户可以查看管理员发布在系统中的公告。

(6)个人中心:用户可以编辑自己的个人资料,也可以查看到菜谱信息、菜品笔记、购买订单和收藏的具体信息。

后台需求:

(1)系统用户:管理员可以编辑自己的资料,也可以对用户的资料进行管理。

(2)系统管理:管理员可以对系统中的轮播图增删改查操作。

(3)菜谱分类管理:管理员可以对菜谱分类列表进行增删改查操作,也可以添加菜谱的分类。

(4)菜谱信息管理:管理员可以对菜谱信息列表进行增删改查操作,也可以添加菜谱的信息。

(5)菜品笔记管理:管理员可以对菜品笔记列表进行增删改查操作,也可以添加菜品笔记。

(6)食材商城管理:管理员可以对食材商城列表进行增删改查操作,也可以添加食材信息。

(7)购买订单管理:管理员可以对购买订单列表进行删改查操作。

(8)通知公告管理:管理员可以编辑系统中的通知公告。

用户用例图如下所示。

图1 用户用例图

管理员用例图如下所示。

图2 管理员用例图

菜谱信息添加用例描述如下表所示。

表1菜谱信息添加用例描述

用例名称

添加新菜谱信息

参与者

管理员

用例概述

本用例用于管理员进行添加新菜谱信息操作

前置条件

管理员添加新菜谱信息前必须登录系统

后置条件

系统中添加一个新菜谱信息

基本事件流

参与者动作

系统响应

  1. 管理员在后台主界面选择“新菜谱信息”。

4、管理员填写新菜谱信息,点击“添加”按钮。

2、系统打开添加新菜谱信息界面。

3、系统检查管理员输入的菜谱信息是正确有效的。

5、系统将菜谱信息添加到数据库中。

6、系统提示“操作成功”。

7、系统跳转到菜谱信息管理界面。

其他事件流

1、系统验证管理员输入的标签名为空,则提示“*请填写完善!”

通知公告添加用例描述如下表所示。

表2通知公告添加用例描述

用例名称

添加通知公告

参与者

管理员

用例概述

本用例用于管理员进行添加通知公告操作

前置条件

管理员添加通知公告前必须登录系统

后置条件

系统中添加一个通知公告

基本事件流

参与者动作

系统响应

1、管理员在后台主界面选择“通知公告管理”。

4、管理员选择一个通知公告,点击“添加”按钮。

6、管理员点击“确定”按钮。

2、系统从数据库中获取通知公告信息列表

3、系统打开通知公告列表界面。

5、系统提示“你确定要添加吗?”。

7、系统将通知公告从数据库中添加。

8、系统提示“添加成功”。

9、系统跳转到通知公告管理界面。

其他事件流

用户编辑用例描述如下表所示。

表3用户编辑用例描述

用例名称

修改用户

参与者

管理员

用例概述

本用例用于管理员进行修改用户信息操作

前置条件

管理员已经登录系统

后置条件

系统中更新一条用户记录

基本事件流

参与者动作

系统响应

1、管理员在后台主界面选择“系统用户”。

4、管理员在用户列表中选择一个用户,点击“编辑”按钮。

6、管理员填写用户信息,点击“保存修改”按钮。

2、系统从数据库中获取用户信息。

3、系统打开用户列表界面。

5、系统打开修改用户信息界面。

7、系统将更改后的添加到数据库中。

8、系统提示“操作成功”。

9、系统跳转到系统用户界面。

其他事件流

菜品笔记用例描述如下表所示。

表4菜品笔记用例描述

用例名称

菜品笔记

参与者

用户

用例概述

本用例用于用户进行对菜品笔记操作

前置条件

用户已经登录系统

后置条件

系统中增加一条用户分享记录

基本事件流

参与者动作

系统响应

1、用户在前台首页选择任意一个菜品。

4、管理员在用户列表中选择一个菜品。

7、用户填写菜品笔记,点击分享。

2、系统从数据库中获取菜品笔记信息。

3、系统打开菜品列表界面。

5、系统从数据库中获取菜品笔记。

6、系统打开菜品信息及分享界面。

8、系统检查用户输入的信息是正确有效的。

9、系统将分享记录添加到数据库中。

其他事件流

1、系统验证用户输入的字段为空,则提示“分享信息不能为空!”。

  • 非功能性需求分析 

随着用户量的增加,系统可能会需要同时服务上千、上万个页面,服务器需要同时响应大量用户的操作,这就要求系统需要有良好的可扩展性,否则系统会出现延迟,卡顿甚至服务器崩溃的问题。高扩展性可以使软件保持旺盛的生命力,同时也能够使系统更好的适应用户增加、提高性能需求、增加应用功能等改变。

系统中保存了大量用户和管理员的个人信息,因此,保证系统服务器和数据安全是在开发过程中需要考虑的重要问题。安全性包括服务器安全、操作系统安全、数据库安全、程序代码安全以及用户个人信息和支付安全等,系统可以通过采用防火墙技术、加密技术、认证技术等来增强其安全性,只有一个健壮安全的系统才能具有长久的生命力。

  • 系统设计
  • 功能模块设计

通过软件的需求分析已经获得了系统的基本功能需求。根据各大功能模块的不同,将系统分为各种功能大块。系统功能结构如下图所示。

图4系统功能结构图

  • 数据库设计
  1. 概念模型设计

概念设计包括实体和联系两部分,如该系统中,用户是一个实体,其属性包括用户 ID 标识、用户名、密码、电话、地址等属性。联系是指实体之间有意义的关联,包括一对一、一对多、多对多三种类型。

系统E-R图如下所示。

图5系统E-R图

  1. 数据库表设计

数据库表是设计和实现系统的一个重要基础。以下列出了NodeJS美食分享平台几个重要的数据库表。

表access_token (登陆访问时长)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

token_id

int

10

0

N

Y

临时访问牌ID

2

token

varchar

64

0

Y

N

临时访问牌

3

info

text

65535

0

Y

N

4

maxage

int

10

0

N

N

2

最大寿命:默认2小时

5

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

6

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

7

user_id

int

10

0

N

N

0

用户编号:

表auth (用户权限管理)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

auth_id

int

10

0

N

Y

授权ID:

2

user_group

varchar

64

0

Y

N

用户组:

3

mod_name

varchar

64

0

Y

N

模块名:

4

table_name

varchar

64

0

Y

N

表名:

5

page_title

varchar

255

0

Y

N

页面标题:

6

path

varchar

255

0

Y

N

路由路径:

7

position

varchar

32

0

Y

N

位置:

8

mode

varchar

32

0

N

N

_blank

跳转方式:

9

add

tinyint

3

0

N

N

1

是否可增加:

10

del

tinyint

3

0

N

N

1

是否可删除:

11

set

tinyint

3

0

N

N

1

是否可修改:

12

get

tinyint

3

0

N

N

1

是否可查看:

13

field_add

text

65535

0

Y

N

添加字段:

14

field_set

text

65535

0

Y

N

修改字段:

15

field_get

text

65535

0

Y

N

查询字段:

16

table_nav_name

varchar

500

0

Y

N

跨表导航名称:

17

table_nav

varchar

500

0

Y

N

跨表导航:

18

option

text

65535

0

Y

N

配置:

19

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

20

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

表collect (收藏)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

collect_id

int

10

0

N

Y

收藏ID:

2

user_id

int

10

0

N

N

0

收藏人ID:

3

source_table

varchar

255

0

Y

N

来源表:

4

source_field

varchar

255

0

Y

N

来源字段:

5

source_id

int

10

0

N

N

0

来源ID:

6

title

varchar

255

0

Y

N

标题:

7

img

varchar

255

0

Y

N

封面:

8

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

9

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

表comment (评论)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

comment_id

int

10

0

N

Y

评论ID:

2

user_id

int

10

0

N

N

0

评论人ID:

3

reply_to_id

int

10

0

N

N

0

回复评论ID:空为0

4

content

longtext

2147483647

0

Y

N

内容:

5

nickname

varchar

255

0

Y

N

昵称:

6

avatar

varchar

255

0

Y

N

头像地址:[0,255]

7

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

8

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

9

source_table

varchar

255

0

Y

N

来源表:

10

source_field

varchar

255

0

Y

N

来源字段:

11

source_id

int

10

0

N

N

0

来源ID:

表gourmet_master (美食达人)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

gourmet_master_id

int

10

0

N

Y

美食达人ID

2

regular_users

int

10

0

Y

N

0

普通用户

3

user_name

varchar

64

0

Y

N

用户姓名

4

user_gender

varchar

64

0

Y

N

用户性别

5

cover_photo

varchar

255

0

Y

N

封面图片

6

user_notes

text

65535

0

Y

N

用户笔记

7

user_recipe

text

65535

0

Y

N

用户菜谱

8

user_profile

text

65535

0

Y

N

用户简介

9

praise_len

int

10

0

N

N

0

点赞数

10

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

11

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表hits (用户点击)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

hits_id

int

10

0

N

Y

点赞ID:

2

user_id

int

10

0

N

N

0

点赞人:

3

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

4

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

5

source_table

varchar

255

0

Y

N

来源表:

6

source_field

varchar

255

0

Y

N

来源字段:

7

source_id

int

10

0

N

N

0

来源ID:

表ingredients_mall (食材商城)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

ingredients_mall_id

int

10

0

N

Y

食材商城ID

2

product_name

varchar

64

0

Y

N

商品名称

3

product_number

varchar

64

0

Y

N

商品编号

4

shipping_address

varchar

64

0

Y

N

发货地址

5

item_pricing

int

10

0

Y

N

0

商品单价

6

accumulated_sales

int

10

0

Y

N

0

累计销售

7

product_images

varchar

255

0

Y

N

商品图片

8

product_introduction

text

65535

0

Y

N

商品简介

9

hits

int

10

0

N

N

0

点击数

10

praise_len

int

10

0

N

N

0

点赞数

11

recommend

int

10

0

N

N

0

智能推荐

12

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

13

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表menu_notes (菜品笔记)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

menu_notes_id

int

10

0

N

Y

菜品笔记ID

2

note_title

varchar

64

0

Y

N

笔记标题

3

publish_users

int

10

0

Y

N

0

发布用户

4

user_name

varchar

64

0

Y

N

用户姓名

5

cover_photo

varchar

255

0

Y

N

封面图片

6

note_description

longtext

2147483647

0

Y

N

笔记描述

7

hits

int

10

0

N

N

0

点击数

8

praise_len

int

10

0

N

N

0

点赞数

9

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

10

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表notice (公告)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

notice_id

mediumint

8

0

N

Y

公告id:

2

title

varchar

125

0

N

N

标题:

3

content

longtext

2147483647

0

Y

N

正文:

4

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

5

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

表praise (点赞)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

praise_id

int

10

0

N

Y

点赞ID:

2

user_id

int

10

0

N

N

0

点赞人:

3

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

4

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

5

source_table

varchar

255

0

Y

N

来源表:

6

source_field

varchar

255

0

Y

N

来源字段:

7

source_id

int

10

0

N

N

0

来源ID:

8

status

bit

1

0

N

N

1

点赞状态:1为点赞,0已取消

表purchase_order (购买订单)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

purchase_order_id

int

10

0

N

Y

购买订单ID

2

product_name

varchar

64

0

Y

N

商品名称

3

product_number

varchar

64

0

Y

N

商品编号

4

shipping_address

varchar

64

0

Y

N

发货地址

5

item_pricing

int

10

0

Y

N

0

商品单价

6

purchasing_users

int

10

0

Y

N

0

购买用户

7

user_name

varchar

64

0

Y

N

用户姓名

8

user_phone_number

varchar

64

0

Y

N

用户电话

9

user_address

varchar

64

0

Y

N

用户地址

10

purchase_quantity

int

10

0

Y

N

0

购买数量

11

total_price

varchar

64

0

Y

N

合计总价

12

pay_state

varchar

16

0

N

N

未支付

支付状态

13

pay_type

varchar

16

0

Y

N

支付类型: 微信、支付宝、网银

14

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

15

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表recipe_classification (菜谱分类)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

recipe_classification_id

int

10

0

N

Y

菜谱分类ID

2

recipe_classification

varchar

64

0

Y

N

菜谱分类

3

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

4

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表recipe_information (菜谱信息)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

recipe_information_id

int

10

0

N

Y

菜谱信息ID

2

dish_name

varchar

64

0

Y

N

菜品名称

3

recipe_classification

varchar

64

0

Y

N

菜谱分类

4

taste_of_dishes

varchar

64

0

Y

N

菜品口味

5

ingredients_and_main_ingredients

varchar

64

0

Y

N

食材主料

6

food_ingredients_and_seasonings

varchar

64

0

Y

N

食材调料

7

dish_craftsmanship

varchar

64

0

Y

N

菜品工艺

8

time_consumption_of_dishes

varchar

64

0

Y

N

菜品耗时

9

cover_photo

varchar

255

0

Y

N

封面图片

10

publish_users

int

10

0

Y

N

0

发布用户

11

user_name

varchar

64

0

Y

N

用户姓名

12

practice_video

varchar

255

0

Y

N

做法视频

13

procedure_steps

longtext

2147483647

0

Y

N

做法步骤

14

hits

int

10

0

N

N

0

点击数

15

praise_len

int

10

0

N

N

0

点赞数

16

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

17

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

regular_users_id

int

10

0

N

Y

普通用户ID

2

user_name

varchar

64

0

Y

N

用户姓名

3

user_gender

varchar

64

0

Y

N

用户性别

4

user_phone_number

varchar

64

0

Y

N

用户电话

5

user_address

varchar

64

0

Y

N

用户地址

6

examine_state

varchar

16

0

N

N

已通过

审核状态

7

user_id

int

10

0

N

N

0

用户ID

8

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

创建时间

9

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间

表slides (轮播图)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

slides_id

int

10

0

N

Y

轮播图ID:

2

title

varchar

64

0

Y

N

标题:

3

content

varchar

255

0

Y

N

内容:

4

url

varchar

255

0

Y

N

链接:

5

img

varchar

255

0

Y

N

轮播图:

6

hits

int

10

0

N

N

0

点击量:

7

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

8

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

表upload (文件上传)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

upload_id

int

10

0

N

Y

上传ID

2

name

varchar

64

0

Y

N

文件名

3

path

varchar

255

0

Y

N

访问路径

4

file

varchar

255

0

Y

N

文件路径

5

display

varchar

255

0

Y

N

显示顺序

6

father_id

int

10

0

Y

N

0

父级ID

7

dir

varchar

255

0

Y

N

文件夹

8

type

varchar

32

0

Y

N

文件类型

表user (用户账户:用于保存用户登录信息)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

user_id

mediumint

8

0

N

Y

用户ID:[0,8388607]用户获取其他与用户相关的数据

2

state

smallint

5

0

N

N

1

账户状态:[0,10](1可用|2异常|3已冻结|4已注销)

3

user_group

varchar

32

0

Y

N

所在用户组:[0,32767]决定用户身份和权限

4

login_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

上次登录时间:

5

phone

varchar

11

0

Y

N

手机号码:[0,11]用户的手机号码,用于找回密码时或登录时

6

phone_state

smallint

5

0

N

N

0

手机认证:[0,1](0未认证|1审核中|2已认证)

7

username

varchar

16

0

N

N

用户名:[0,16]用户登录时所用的账户名称

8

nickname

varchar

16

0

Y

N

昵称:[0,16]

9

password

varchar

64

0

N

N

密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成

10

email

varchar

64

0

Y

N

邮箱:[0,64]用户的邮箱,用于找回密码时或登录时

11

email_state

smallint

5

0

N

N

0

邮箱认证:[0,1](0未认证|1审核中|2已认证)

12

avatar

varchar

255

0

Y

N

头像地址:[0,255]

13

open_id

varchar

255

0

Y

N

针对获取用户信息字段

14

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

15

vip_level

varchar

255

0

Y

N

会员等级

16

vip_discount

double

11

2

Y

N

0.00

会员折扣

表user_group (用户组:用于用户前端身份和鉴权)

编号

名称

数据类型

长度

小数位

允许空值

主键

默认值

说明

1

group_id

mediumint

8

0

N

Y

用户组ID:[0,8388607]

2

display

smallint

5

0

N

N

100

显示顺序:[0,1000]

3

name

varchar

16

0

N

N

名称:[0,16]

4

description

varchar

255

0

Y

N

描述:[0,255]描述该用户组的特点或权限范围

5

source_table

varchar

255

0

Y

N

来源表:

6

source_field

varchar

255

0

Y

N

来源字段:

7

source_id

int

10

0

N

N

0

来源ID:

8

register

smallint

5

0

Y

N

0

注册位置:

9

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

创建时间:

10

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新时间:

  • 系统实现
  • 用户功能实现
  1. 注册界面

用户进入系统首页后,点击“注册”链接进入到注册页面,按照页面提示输入用户名、密码,页面进行表单验证,验证输入的用户名是否合法,表单验证通过后,点击“立即注册”按钮,检测数据库中是否已经存在该用户名,若数据库中不存在,则注册成功,注册成功后,自动跳转到登录页面。

用户注册页面,如下图所示。 

图5-1用户注册页面

注册代码如下:

Register.prototype.index = async function(ctx) {

var group_list = await $.services["user_group"].get_list({}, Object.assign({}, this.config));

return await ctx.render(this.config.tpl + "index.html", {

group_list

});

};

Register.prototype.api = async function(ctx) {

var user = $.services.user;

var body = ctx.request.body;

var username = body.username;

var obj = await user.get_obj({

username

});

if (obj) {

return {

error: {

code: 70000,

message: "账户名已存在",

},

};

} else {

var password = md5(body.password);

var nickname = body.nickname;

var user_group = body.user_group;

var email = body.email;

var email_state= body.hasOwnProperty('email_state') ? body.email_state : 0;

var phone = body.phone;

var phone_state= body.hasOwnProperty('phone_state') ? body.phone_state : 0;

var avatar = body.avatar;

var bl_reg = await user.add({

username,

password,

nickname,

user_group,

email,

email_state,

phone,

phone_state,

avatar

});

if (bl_reg) {

return {

result: "注册成功"

};

} else {

return {

error: {

code: 70000,

message: "注册失败",

},

};

}

}

};

  1. 登录界面

用户注册完成后,点击“登陆”进入到登陆页面,输入用户名和密码,点击“登陆”按钮,对用户名和密码进行验证,根据传入的用户名和密码在数据库中是否能查询到一条用户信息,若不能返回用户信息则登陆失败,页面提示用户名或密码错误。

登录界面如下图所示。

图5-2登录界面

登录代码如下:

const md5 = require("md5");

var Controller = require("../core/controller.js");

class Login extends Controller {

constructor(config) {

super(

Object.assign({

tpl: "./login/",

service: "user",

},

config

)

);

}

}

Login.prototype.api = async function(ctx) {

var body = ctx.request.body;

var obj = await $.services["user"].get_obj({

username: body.username

},{like:false});

if (obj) {

var group = await $.services["user_group"].get_obj({

name:obj.user_group

})

if (group){

if (group.name!=="管理员"){

var sql = "select examine_state from "+ group.source_table +" WHERE user_id = " + obj.user_id;

var userExamine = await $.mysql.run(sql);

if (userExamine && userExamine.length > 0 && userExamine[0].examine_state!=="已通过"){

return {

error: {

code: 70000,

message: "该用户审核未通过"

},

};

}

}

if (obj.state!==1){

return {

error: {

code: 70000,

message: "用户非可用状态,不能登录"

},

};

}

var password = md5(body.password);

if (password === obj.password) {

ctx.session.user = obj;

var date = Date.parse(new Date());

var token = md5(obj.user_id + "_" + date);

await $.services["access_token"].add({

token,

info: JSON.stringify(obj),

user_id:obj.user_id

});

obj.token = token;

return {

result: {obj}

};

} else {

return {

error: {

code: 70000,

message: "密码错误"

},

};

}

}else {

return {

error: {

code: 70000,

message: "用户组不存在"

},

};

}

} else {

return {

error: {

code: 70000,

message: "账户不存在"

}

};

}

};

  1. 首页的实现

用户界面要尽量简洁大方,使用户能够方便找到需要的功能入口,浏览美食列表、查看美食资讯,且要易于修改和维护,同时还要保证用户合法和系统安全。

首页界面如下图所示。

图5-3首页界面

  1. 菜谱信息的实现

菜谱信息模块:用户可以根据关键词所搜菜谱信息,点击感兴趣的菜谱信息进行查看,也可以点赞、收藏和评论。菜谱信息界面如下图所示。

图5-4菜谱信息界面

  1. 菜品笔记的实现

菜品笔记模块:用户可以根据关键词所搜菜品笔记,点击感兴趣的菜品笔记进行查看,也可以点赞、收藏和评论,也可以添加菜品笔记。如图所示。

图5-5菜品笔记界面

  1. 食材商城的实现

食材商城模块:用户可以根据关键词所搜食材信息,点击感兴趣的食材进行查看,也可以点赞、收藏和评论,也可以点击“购买”。如图所示。

图5-6食材商城界面

  • 后端管理员主要功能实现 
  1. 系统用户的实现

管理员对系统用户的管理,在管理员管理实现管理员用户的管理,包括录入、删除、修改。

图5-7系统用户界面

  1. 通知公告管理的实现

管理员可以获取系统中所有通知公告的列表并对其进行编辑。管理员在添加通知公告时,需要输入网站标题、内容等。添加通知公告完成,数据库通知公告表添加一条信息。管理员可以搜索通知公告,同时可以对已经添加的通知公告进行编辑。通知公告管理界面如下图所示。

图5-8通知公告管理界面

  1. 菜谱分类管理的实现

菜谱分类管理:管理员可以对菜谱分类列表进行增删改查操作,也可以添加菜谱的分类。菜谱分类管理界面如下图所示。

图5-9菜谱分类管理界面

  1. 菜品笔记管理的实现

菜品笔记管理:管理员可以对菜品笔记列表进行增删改查操作,也可以添加菜品笔记。菜品笔记管理界面如下图所示。

图5-10菜品笔记管理界面

  1. 食材商城管理的实现

食材商城管理:管理员可以对食材商城列表进行增删改查操作,也可以添加食材信息。食材商城管理界面如下图所示。

图5-11食材商城管理界面

  1. 购买订单管理的实现

购买订单管理:管理员可以对购买订单列表进行删改查操作。购买订单管理界面如下图所示。

图5-12购买订单管理界面

  • 系统测试
  • 系统可靠性测试

以进入系统首页的访问速度为例展示系统的性能测试;系统的主要用户群体是购物理念较为先进的消费者,系统要在3秒钟内响应;需要完成页面的菜单栏、首页轮播图片、类目及菜谱信息列表、菜品笔记以及各功能模块入口等元素的显示。

  • 系统功能性测试

功能性测试是指执行指定的工作流程,通过对一个系统的所有特性和功能都进行测试确保符合需求和规范。

系统功能性测试表如下表所示。

11系统功能性测试表

编号

测试功能

测试内容

测试结果

1

用户登录

1.验证用户名与密码的正确性。

2.验证密码是否可见。

通过

2

首页展示

1.首页数据是否成功加载。

2.验证搜索功能的准确性。

3.验证是否可以异步加载。

4.验证导航栏按钮。

通过

3

个人信息修改

1.验证登录名是否可以正常更改。

2.验证联系方式是否可以更改。

3.验证收货地址可以正常修改。

4.验证密码是否可以修改。

通过

4

菜谱信息管理

1.验证标签新增是否可以成功。

2.验证标签删除是否可以成功。

通过

5

添加美食分享

1.上传美食分享是否添加验证。

2.美食是否成功上传。

3.验证表单是否提交成功。

通过

6

系统用户

1.验证用户录入功能。

2.验证用户违规清理功能。

通过

  • 系统合格性测试

集成测试后,所有的模块已经全部连接完毕,形成了一个完整的系统。合格性测试是在集成测试完毕后,进一步对系统进行综合性的检测。经过合格性测试,可以检查出系统是否符合系统的设计,能够完成需求的所有功能。本系统经过最后的测试,所有模块功能都能按预定要求工作。

  • 测试结果

在实际测试中,经过一系列系统性的测试,使我们能够及时发现一些系统在设计中出现的疏忽和漏洞。经过严密的测试,不仅发现了模块内部的错误,也查找到模块连接后产生的错误。经过测试,对系统产生错误的地方进行优化、修改和完善,使得系统能够实现最初设计的基本功能。

  • 总结与展望

本文针对美食分享的特点和用户需求,利用Node.js相关技术,通过详细的需求分析、页面设计和功能设计,实现了包括用户模块、菜谱信息模块、菜品笔记模块、食材商城模块和用户注册、用户登录、菜谱信息、通知公告、购买订单。另外,系统还进行了数据安全设计,并添加了用户的访问控制,建立了一个完整、健壮、安全稳定的NodeJS美食分享平台。

由于时间限制和本人能力条件有限,还存在一些不足,今后也会出现许多新的开发技术,未来还可以对程序做出如下改进:

(1)优化程序页面,使页面更加美观且方便操作;

(2)优化美食搜索功能,提供多条件选择查询搜索;

(3)优化推荐功能,提高美食推荐的精准度;

(4)进一步提高使用程序的安全性,使其更加健壮;

(5)优化数据和代码,提升软件效率,方便维护和扩展。

参考文献

  [1]  杨玲.  基于文本挖掘的美食旅游者在线分享行为特征研究    [J].  黑龙江科学,  2023,  14  (15):  16-19.  

  [2]  P. M E ,P. P ,D. M R , et al.  Correction to: Sharing food with hyenas: a latrine of Pachycrocuta brevirostris in the Early Pleistocene assemblage of Fuente Nueva‑3 (Orce, Baza Basin, SE Spain)    [J].  Archaeological and Anthropological Sciences,  2023,  15  (6):    

  [3]  P. M E ,P. P ,D. M R R , et al.  Sharing food with hyenas: a latrine of Pachycrocuta brevirostris in the Early Pleistocene assemblage of Fuente Nueva-3 (Orce, Baza Basin, SE Spain)    [J].  Archaeological and Anthropological Sciences,  2023,  15  (6):    

    [4]    郭朝阳.    少数民族美食类短视频的内容生产研究[D].    河北大学,    2023.     DOI:10.27103/d.cnki.ghebu.2023.000520.   

  [5]  Brito R ,Waldzus S ,Schubert W T , et al.  Commensality constitutes communalism: Producing emergent bonds in experimental small groups by sharing food and drink    [J].  European Journal of Social Psychology,  2023,  53  (6):  1128-1143.  

  [6]  Clair W ,Kate H ,Helen S .  Food and the prison environment: a meta-ethnography of global first-hand experiences of food, meals and eating in custody.    [J].  Health & justice,  2023,  11  (1):  23-23.  

  [7]  徐文倩,谢丹艳,黎柳,等.  基于JSP的美食分享网站的设计与实现    [J].  电脑知识与技术,  2023,  19  (09):  57-59.  DOI:10.14004/j.cnki.ckt.2023.0421.

  [8]  姜广秀.  中华美食是国际青年交流柔软且强大的力量    [J].  国际人才交流,  2021,    (12):  58-60.  

  [9]  鲜易洲,杨蕊,吴蓉,等.  时食美食分享系统的设计与分析    [J].  电脑知识与技术,  2021,  17  (09):  85-87.  DOI:10.14004/j.cnki.ckt.2021.0845.

  [10]  何燕,蔡起辉.  平潭巷弄飘台味  欢声笑语一家亲——台籍厨师张先超以菜会友分享美食    [J].  台声,  2020,    (16):  63-65.  

    [11]    杨艳妮.    分享餐饮美食平台的政府监管问题研究[D].    吉林大学,    2019.  

  [12]  朱爱华,付曹政,曹钟,等.  基于Node.js框架和MongoDB数据库的物流信息服务系统设计    [J].  北京建筑大学学报,  2018,  34  (04):  41-46.  DOI:10.19740/j.1004-6011.2018.04.07.

  [13]  张晓颖.  试析基于Node.js的前后端分离框架的实现    [J].  计算机产品与流通,  2018,    (10):  24.  

  [14]  刘琼宇,刘擎业,宋易欣,等.  互联网美食平台发展现状及对策——以菜谱类美食应用为例    [J].  现代食品,  2017,    (01):  31-35.  DOI:10.16736/j.cnki.cn41-1434/ts.2017.01.011.

  [15]  程桂花,沈炜,何松林,等.  Node.js中Express框架路由机制的研究    [J].  工业控制计算机,  2016,  29  (08):  101-102.  

  [16]  卢红霞,方晓亮.  社会化顾客价值在美食分享网站的应用研究    [J].  物流工程与管理,  2015,  37  (11):  230-233.  

  [17]  张进飞,黄晓霞.  基于BaaS服务的iOS平台美食分享系统设计与实现    [J].  现代计算机(专业版),  2015,    (19):  78-80.  

  [18]  李轶.  基于Node.js的JavaScript并发控制流框架    [J].  江汉大学学报(自然科学版),  2015,  43  (02):  170-176.  DOI:10.16389/j.cnki.cn42-1737/n.2015.02.013.

  [19]  翁伟轩.  微博平台的信息分享动因——以新浪微博微美食为例    [J].  新闻传播,  2014,    (17):  59-60.  

  [20]  李彤.  基于PHP和MySQL的小型应用设计——以Android的美食和出行信息分享平台为例    [J].  计算机光盘软件与应用,  2014,  17  (10):  263+265.  

致谢

时光飞逝,转眼间我在学校的这些年生活即将结束,回顾这几年的学习生活,收获良多,既有幸福也有难过,学校生活的结束对于我来说也是一个新的开始。论文即将完成,在此,我心中有许多想要感谢的人。首先感谢我的导师,不仅在学习研究方面加以指导,也在生活和为人处世上给予帮助。还要感谢授课老师,你们严谨的学术精神和积极向上的工作态度都在激励我的成长和进步。感谢多年来一直生活在一起的室友,谢谢你们多年来的陪伴和照顾。最后,要感谢各位论文评审老师,感谢您们在百忙之中抽空评阅本论文并给出宝贵的意见和建议。

免费领取项目源码,请关注❥点赞收藏并私信博主,谢谢~

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Node.js中使用request库修改user-agent,你可以在发送请求之前设置请求头中的user-agent字段。以下是一个示例代码: ```javascript const request = require('request'); const options = { url: 'http://example.com', headers: { 'User-Agent': 'Your New User Agent' } }; request(options, function(error, response, body) { // 处理响应 }); ``` 在上面的代码中,你可以将`'Your New User Agent'`替换为你想要设置的新的user-agent字符串。然后,将`options`对象传递给`request`函数,以发送带有修改后user-agent的请求。 请注意,这只是一个示例代码,你需要根据你的实际需求进行修改和适应。 #### 引用[.reference_title] - *1* [NodeJs 发送request请求 设置Cookie](https://blog.csdn.net/fengxuenanhai/article/details/50923351)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [nodejs request设置proxy](https://blog.csdn.net/yuan882696yan/article/details/25052469)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值