基于nodejs手机网页端购物电商系统.rar(含源码)

该商城shop是一个nodejs写的商城系统,。目前功能首页,商品搜索,购物车,我的,登录,商品详情,结算等,网站手机端网页程序,适合毕业设计以及商用二次开发,前端:weui.cssjqueryjquery.spinnerrequirejsswiper-4.1.6vuevue-resource;后端:koa2koa-bodyparserkoa-routernunjucksmimemzkoa-compresssequelizemysqlkoa-session2log4jsmoment

数据库相关代码:

var config = {dialect: 'mysql',database: 'zshop',username: 'root',password: 'root',host: 'localhost',port: 3306,rootpath: '/zshop'
};module.exports = config;

配置文件

// config files:
const defaultConfig = './config-default.js';
const overrideConfig = './config-override.js';
const testConfig = './config-test.js';const fs = require('fs');var config = null;if (process.env.NODE_ENV === 'test') {console.log(`Load ${testConfig}...`);config = require(testConfig);
} else {console.log(`Load ${defaultConfig}...`);config = require(defaultConfig);try {if (fs.statSync(overrideConfig).isFile()) {console.log(`Load ${overrideConfig}...`);config = Object.assign(config, require(overrideConfig));}} catch (err) {console.log(`Cannot load ${overrideConfig}.`);}
}module.exports = config;

部分页面截图:
在这里插入图片描述

代码如下:

//购物车ctrl
const cartService = require('../service/cart-service');
const APIError = require('../middleware/rest').APIError;module.exports = {'GET /user/cart': async (ctx, next) => {var userCartProds = await cartService.getUserCartProd(ctx.session.user); ctx.render('cart.html', userCartProds);},'POST /userapi/delCartProd': async (ctx, next) => {//console.log(JSON.stringify(ctx.request.body));var cid = ctx.request.body.cid || '';await cartService.deleteCardProd(cid); //ctx.rest();ctx.rest({code: 'system:success', message: '成功'});},'POST /userapi/chgCartProdCount': async (ctx, next) => {var cid = ctx.request.body.cid || '';var newValue = ctx.request.body.newValue || '';await cartService.updateCardProdCount(cid, newValue); ctx.rest();},'POST /userapi/addCartProd': async (ctx, next) => {var pid = ctx.request.body.pid || '';var pcount = ctx.request.body.pcount || '1';if (!pid || pid.trim() == '') {throw new APIError('cart:empty_pid', '商品ID不能为空');}let cartSize = await cartService.addCartProd(pid, pcount, ctx.session.user.userId); ctx.rest({cartSize: cartSize});}
};

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码如下:

//首页ctrl
const productService = require('../service/product-service');
const adService = require('../service/ad-service');
const orderService = require('../service/order-service');
const userService = require('../service/user-service');
const APIError = require('../middleware/rest').APIError;
const fs = require('mz/fs');
const uuid = require('node-uuid');module.exports = {//首页'GET /': async (ctx, next) => {ctx.logger.info('===index in===');var products = await productService.getRecomProduct(1); //精品推荐var headAds = await adService.getAdByPosition(1); //头部广告var midAds = await adService.getAdByPosition(2); //中部广告//let userId = null;//if (ctx.session.user) userId = ctx.session.user.userId;//let orderCount = await orderService.countOrder("1111", userId);console.log('===index mid===');ctx.render('index.html', { prods: products, hAds: headAds, mAdImg: midAds[0].image,user: ctx.session.user//orderCount: orderCount});ctx.logger.info('===index out===');},//商品搜索'GET /api/search/:key/:limit/:offset/:ordertype': async (ctx, next) => {var skey = ctx.params.key;if (!skey || skey.trim() == '') {throw new APIError('sproduct:empty_key', '搜索关键字不能为空');}var products = await productService.searchProduct(skey, ctx.params.limit, ctx.params.offset, ctx.params.ordertype);ctx.rest({prods: products});},'GET /user/userPage': async (ctx, next) => { let user = await userService.getOneUser({userId: ctx.session.user.userId});ctx.render('user.html', {userId: user.userId,name: user.name,email: user.email,headImage: user.headImage});},'POST /userapi/checkUserInfo': async (ctx, next) => {let email = ctx.request.body.email || '';let userId = ctx.request.body.userId || '';let result = await userService.checkUserInfo(email, userId, ctx.session.user.id);ctx.rest(result);},'POST /userapi/uptUserInfo': async (ctx, next) => {let noImage = ctx.query.noImage;let user = await userService.getOneUser({userId: ctx.session.user.userId});let name = null;let userId = null;let email = null;if (noImage) {name = ctx.request.body.name || '';userId = ctx.request.body.userId || '';email = ctx.request.body.email || '';} else {name = ctx.request.body.fields.name || '';userId = ctx.request.body.fields.userId || '';email = ctx.request.body.fields.email || '';}let userValue = new Object();if (name != user.name) {userValue.name = name;}if (userId != user.userId) {if (await userService.countUser({userId: userId}) >= 1) {throw new APIError('uptUserInfo:repeat_userId', '该用户ID已被占用');}userValue.userId = userId;} if (email.trim() != '' && email != user.email) {if (await userService.countUser({email: email}) >= 1) {throw new APIError('uptUserInfo:repeat_email', '该电子邮箱已被占用');}userValue.email = email;} if (!noImage) {let file = ctx.request.body.files.uploaderInput; // 获取上传文件let reader = fs.createReadStream(file.path); // 创建可读流let ext = file.name.split('.').pop(); // 获取上传文件扩展名let filePath = `static/images/head/${uuid.v4().replace(/-/g, "")}.${ext}`;let upStream = fs.createWriteStream(filePath); // 创建可写流reader.pipe(upStream); // 可读流通过管道写入可写流 userValue.headImage = '/' + filePath;}await userService.uptUser({id: user.id, version: user.version}, userValue);if (userValue.name) {ctx.session.user.name = userValue.name;}if (userValue.userId) {ctx.session.user.userId = userValue.userId;}if (userValue.email) {ctx.session.user.email = userValue.email;}if (userValue.headImage) {ctx.session.user.headImage = userValue.headImage;}if (!noImage && user.headImage.indexOf("bear.jpg") == -1) {let delFilePath = user.headImage.substr(1, user.headImage.length - 1);fs.unlink(delFilePath, function (err) {if(err) {console.log(user.headImage + '删除失败:' + err);}})}ctx.rest({});},'GET /user/uptPassPage': async (ctx, next) => { ctx.render('upt-pass.html');},'POST /userapi/checkPassword': async (ctx, next) => {let oldPassword = ctx.request.body.oldPassword || '';let user = await userService.getOneUser({userId: ctx.session.user.userId});if ( oldPassword != user.passwd ) {throw new APIError('index:error_password', '原的密码错误');}ctx.rest({});},'POST /userapi/uptPass': async (ctx, next) => {let oldPassword = ctx.request.body.oldPassword || '';let password = ctx.request.body.password || '';//let passwordConfirm = ctx.request.body.passwordConfirm || '';let user = await userService.getOneUser({userId: ctx.session.user.userId});if ( oldPassword != user.passwd ) {throw new APIError('index:error_password', '原的密码错误');}let userValue = new Object();await userService.uptUser({id: user.id, version: user.version}, {passwd: password});ctx.rest({});}
};

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
相关文档视频说明:点击观看

完整源码下载地址:请点击》》》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1380201.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

9个主流影视站手机仿站源码分享 v1.0

介绍: 九种主流视频APP风格仿站手机影视网站程序,页面精美,基于PHP开发,无需数据库; 源码代码简洁清晰,完全免费无后门,简单上传即可使用,自定义解析播放接口; 源码所有…

基Android实现网上商城的系统开发(附带源码)

主要代码 HomeActivity.java 代码如下: package com.itau.jingdong.ui; import android.app.AlertDialog; import android.app.Dialog; import android.app.TabActivity; import android.content.DialogInterface; import android.content.DialogInterface.OnCli…

[附源码]计算机毕业设计基于Springboot的手机电商网站

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Destoon7.0绿色行业B2B大气平台门户全站源码/带手机版+商务中心网站商城系统源码

非常大气的一套destoon系统,适用于各种B2B行业网站,功能强大完善,带商务会员中心!Destoon7.0内核,带安装说明,并附赠火车头采集接口以及185套公司模板。站长亲测非常完美,有需要的下载吧。 下载…

(纯原创) 基于JAVAWEB的网上购物平台(完整源代码以及开发文档)

摘要 随着计算机网络技术的飞速发展和人们生活节奏的不断加快,电子商务技术已经逐渐融入了人们的日常生活当中,网上商城作为电子商务最普遍的一种形式,已被大众逐渐接受。因此开发一个网上商城系统,适合当今形势,更…

【android精品源码系列】安卓线上购物商城

安卓线上购物商城【源码推荐】 简介效果演示首页分类购物车我的 获取方式关于我 简介 分享一个非常优秀的Android商城,功能非常完备,主要功能有: 1.首页不同item展示商品,轮播图等2.商品详情立即购买和加入购物车3.商品的分类&a…

Android在线源码网站推荐

Android开发过程中调用的Android SDK中framework jar提供的源码,这部分不包括hide的内容和非framework的代码,但解决一般的问题可以尝试使用此方式。 1、http://aospxref.com/ 优点:更新速度快 缺点:历史版本较少 2、http://an…

电子商务网站源码HTML5+CSS3+JavaScript

电子商务网站 利用CSS3HTML5Jquery开发的一个电商网站页面,代码都有详细注释,希望能帮到你们,下面是页面的展示。源代码在GitHub上,地址:https://github.com/PowerDos/Mall 首页动态图片 图片比较大,可能…

【源码分享】java多用户B2B2C商城源码带WAP手机端源码

分享一款非常不错的java多用户B2B2C商城源码,带WAP手机端源码,源码地址在文末。 需要源码学习,可私信我获取。 一、技术构架: 开发语言: Java1.7 数 据 库 : MySQL5.5 数据库持久层:阿里巴巴…

2023最新手机流量卡充值管理系统网站源码+内附搭建教程

正文: 市面上很火的流量卡项目,可以用这套平台系统来管理,实现自定义套餐名以及流量卡运营,充值收款,即时返佣以及流量卡运营,内附搭建教程。 程序: wwxrhs.lanzoul.com/i3RRK0kx6q1c 图片:

java连接sqlserver细节处理

这个文章记录一下java连接sqlserver细节处理 &#xff0c;有其他的细节可以评论。 首先是 驱动 driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriverpom文件 将mysql的改成这个 <!-- 数据库驱动 --><dependency><groupId>com.microsoft.sqlserve…

Android 10还没适配完,Android 11又要出了?

在谷歌的内部峰会视频中出现了一页幻灯片&#xff0c;其中明确给出了Android 11正式版将于9月8日&#xff08;周二&#xff09;正式发布的消息。 去年Android 10是9月3日正式上线的&#xff0c;这次Android11在9月8日推出也并不令人奇怪。预计届时&#xff0c;系统源码会上传到…

一文看懂:小程序分享到朋友圈【建议收藏】

点击上方 关注我们 作者简介 张所勇 转转平台运营中心前端负责人&#xff0c;在前端领域有深入研究&#xff0c;包括&#xff1a;sketch一键切图、前端数据模型化&#xff0c;小程序基础能力建设等多个方面&#xff0c;10年工作经验中&#xff0c;做了2年工程师&#xff0c;5年…

【小程序】766- 一文看懂小程序分享到朋友圈

点击上方 关注我们 作者简介 张所勇 转转平台运营中心前端负责人&#xff0c;在前端领域有深入研究&#xff0c;包括&#xff1a;sketch一键切图、前端数据模型化&#xff0c;小程序基础能力建设等多个方面&#xff0c;10年工作经验中&#xff0c;做了2年工程师&#xff0c;5年…

AMD高保真超分算法1.0解密

FSR 1.0是空间滤波算法&#xff0c;分成EASU和RCAS两部分。EASU是边缘适配的空间上采样(Edge Adaptive Spatial Upsampling)&#xff0c;RCAS是健壮对比度适配锐化(Robust Contrast Adaptive Sharpening)&#xff0c;从CAS发展而来。 Lanczos 采样及多项式拟合 FSR 1.0 使用了 …

windows10怎么显示文件后缀(扩展名)?

随意点击一个文件夹&#xff0c;点击查看&#xff1a; 勾选文件扩展名&#xff1a; 即可看到文件扩展名&#xff1a; 参考文章&#xff1a;windows电脑怎么显示文件后缀

windows如何显示文件扩展名称?

本文教程主要介绍一下&#xff0c;windows系统如何显示文件扩展名称&#xff08;默认情况下文件扩展名称是隐藏的&#xff09;。 下面提供目前主流的操作系统版本&#xff08;win7,win10,win11&#xff09;的显示文件扩展名称的方法。 目录 一、windows7设置方法 二、windows…

win10显示文件扩展名、隐藏文件

win10显示文件扩展名、隐藏文件 打开任意一个文件夹&#xff0c;点击右上角的【展开功能区】按钮&#xff0c;如下图&#xff1a; 点击【查看】按钮&#xff0c;勾选【文件扩展名】和【隐藏的项目】

Win7如何显示文件扩展名

有时&#xff0c;我们想知道或者需要修改电脑中某个文件的扩展名&#xff0c;即通常所说的文件格式&#xff0c;但是重命名后发现还是和没改一样。在Windows系统中&#xff0c;这是因为文件的扩展名通常默认是隐藏的&#xff0c;而在此情况下重命名操作修改的只是文件的文件名&…

RCNA——单臂路由

一&#xff0c;实验背景 之前的VLAN实现的很多都是相同部门互相访问&#xff0c;不同部门无法访问。不过这次整来了一个路由器&#xff0c;领导说大部分的部门虽说有保密信息需要互相隔离&#xff0c;但是这些部门和其它部门也应该互相连通以方便工作交流。因此要配置新的环境&…