定制软件vue+node.js+mysql项目搭建

前言

  • 用vue定制软件搭建前端页面、定制软件用开发后端接口、数据库用mysql

定制软件可行性分析

  • 缺点:
  1. nodejs单线程,不能做cpu定制软件密集型操作,定制软件导致时间片不能释放,定制软件阻塞后面的任务。
  2. nodejs定制软件可靠性比较低,定制软件一个地方报错会导致整定制软件个程序崩溃,定制软件需要守护进程或者docker定制软件重启来解决。
  3. 定制软件像使用多核性能的时候需要使用cluster或者部署多个实例,比较麻烦。
  4. 内存默认0.7G和1.4G,设置大了之后垃圾回收会变慢,可能需要多部署几个实例。
  • 优点:
  1. nodejs底层异步io,性能比较好。
  2. 编写起来不用担心线程的问题。
  3. 开发速度高,弱类型语言比较灵活,不像强类型一样需要各种转换,代码量少。
  4. 单页应用ssr比较方便,上下文比较相同。
  • 关于nodejs服务安全性上的一些考量

知识储备

  • :是一个事件驱动 I/O 服务端 JavaScript 环境,基于 Google 的 V8 引擎。简单的说 Node.js 就是运行在服务端的 JavaScript。
  • :是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。使用 Express 可以快速地搭建一个完整功能的网站。

    以下是几个需要与 express 框架一起安装的常用模块:

  • body-parser :node.js 中间件,用于处理 JSON, Raw, Text 和 URL 编码的数据。
  • cookie-parser: 这就是一个解析Cookie的工具。通过req.cookies可以取到传过来的cookie,并把它们转成对象。
  • cookie-session:session管理工具,可设置会话内容
  • multer:node.js 中间件,用于处理 enctype="multipart/form-data"(设置表单的MIME编码)的表单数据。

项目搭建

    该部分直接参考 

关于改造

常规改造建议:

  • 配置前端跨域
  1. //vue.config.js
  2. //定义常量
  3. const NODEJS_SERVE_PREFIX = "/nserve" //Nodejs服务路径前缀标识
  4. module.exports = {
  5. // 关闭检查
  6. lintOnSave: false,
  7. // 免提取CSS 文件,强制内联
  8. css: { extract: false },
  9. // // 在exports中添加,这里很关键,不配置不行
  10. transpileDependencies: ['element-ui'],
  11. chainWebpack(config) {
  12. // 在chainWebpack中添加下面的代码
  13. config.entry('main').add('babel-polyfill') // main是入口js文件
  14. },
  15. //》》》开发阶段跨域配置看这里
  16. devServer: {
  17. overlay: { // 让浏览器 overlay 同时显示警告和错误
  18. warnings: true,
  19. errors: true
  20. },
  21. host: "localhost", //默认请求-主机地址
  22. port: 8888, // 默认请求-端口号
  23. https: false, // https:{type:Boolean}
  24. open: false, //配置自动启动浏览器
  25. hotOnly: true, // 热更新
  26. // proxy: 'http://localhost:3333' // 配置跨域处理,只有一个代理
  27. proxy: { //配置多个跨域
  28. NODEJS_SERVE_PREFIX: {
  29. target: "http://localhost:3333",//你的NodeJS服务监听端口
  30. changeOrigin: true,
  31. // ws: true,//websocket支持
  32. secure: false,
  33. pathRewrite: {
  34. '^/nserve': '/nserve' //此处不写也可以,看你实际情况
  35. }
  36. }
  37. }
  38. }
  39. }

一点提示:如上,跨域配置一般指开发阶段(即本地)的跨域,线上则是通过Node.js等进行配置

  • 注册相关依赖包
  1. npm i mysql -s
  2. npm i express -s
  3. npm i body-parser -s
  4. npm i cookie-parser -s
  5. npm i cookie-session -s
  • 定义一个JS,负责与express框架交互服务的具体内容,主要包括:MySQL连接配置,服务接口配置(接口路径映射 + 调用与返回处理等)
  1. // nodeServe.js
  2. //引入服务包
  3. const express = require('express');
  4. const mysql = require('mysql');
  5. //配置MySQL连接池
  6. const db = mysql.createPool({
  7. host: 'localhost',
  8. user: 'root',
  9. password: '123456',
  10. database: 'mydb'
  11. });
  12. //默认导出:定义接口
  13. module.exports = () => {
  14. //接口路由
  15. const route = express.Router();
  16. /**
  17. * 用户接口(GET请求)
  18. */
  19. route.get('/user/query', (req, res) => {
  20. //解析请求参数
  21. let uid = req.query.uid;
  22. //定义SQL语句
  23. const sql = `SELECT * FROM user WHERE uid=` + uid;
  24. doDbQuery(sql,res)
  25. });
  26. /**
  27. * 用户接口(POST请求)
  28. */
  29. route.post('/user/save', (req, res) => {
  30. let mObj = {};
  31. for (let obj in req.body) {
  32. mObj = JSON.parse(obj);
  33. }
  34. let name = mObj.name;
  35. let age = mObj.age;
  36. const sql = `INSERT INTO user(name,age) VALUES('${name}','${age}')`;
  37. doDbQuery(sql, res);
  38. });
  39. /**
  40. * 执行SQL
  41. * @param insUserInfo
  42. * @param res
  43. */
  44. function doDbQuery(sql, res) {
  45. db.query(sql, (err, data) => {
  46. if (err) {
  47. //失败返回
  48. console.log(err);
  49. res.status(500).send({ 'msg': '服务器出错', 'status': 0 }).end();
  50. } else {
  51. //成功返回
  52. res.send(data);
  53. }
  54. });
  55. };
  56. return route;
  57. }
  • 定义一个JS,负责Nodejs服务启动配置,主要包括:跨域配置、监听端口配置、接口路由配置(即引入上一步的服务JS处理)、Cookie等
  1. //nodeApplication.js
  2. //定义常量
  3. const NODEJS_SERVE_PREFIX = "nserve" //Nodejs服务路径前缀标识
  4. const express = require('express');
  5. const bodyParser = require('body-parser');
  6. const cookieParser = require('cookie-parser');
  7. const cookieSession = require('cookie-session');
  8. const server = express();
  9. server.use(bodyParser.urlencoded({ extended: false }));
  10. //配置跨域
  11. server.all('*', function(req, res, next) {
  12. res.header('Access-Control-Allow-Origin', req.header("origin"));//如果设置为"*",有时候还是会出现跨域问题(说一个神奇的事,甚至出现同一个项目,在不同时间点出现了不同的结果,我也不知道为啥,明明啥也没干)
  13. res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');
  14. res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
  15. if (req.method === 'OPTIONS') {
  16. res.send(200);
  17. /make the require of options turn back quickly/
  18. } else {
  19. next();
  20. }
  21. });
  22. //配置NodeJS服务端口
  23. server.listen(3333, () => {
  24. console.log("NodeJS服务已启动 监听端口:3333");
  25. });
  26. //中间数据管理
  27. (() => {
  28. //处理cookie
  29. server.use(cookieParser());
  30. //处理session
  31. let keyArr = ['1','2'];
  32. server.use(cookieSession({
  33. name: "hc",
  34. keys: keyArr,
  35. maxAge: 30 * 60 * 1000
  36. }))
  37. })();
  38. //配置路由处理
  39. server.use('/' + NODEJS_SERVE_PREFIX, require('./route/nodeServe.js')());
  • 在VUE页面上使用
  1. let _this = this
  2. _this.$http.get('/nserve/user/query').then((res)=>{
  3. _this.result= res.data;
  4. },(err)=>{
  5. console.log(err);
  6. })

启动

  1. //启动NodeJS服务
  2. node node nodeApplication.js
  3. //启动前端
  4. npm run serve

其他参考文章

项目案例参考

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发