Vue+node.js+mysql 프로젝트 구축

머리말

  • vue를 사용하여 프런트 엔드 페이지를 빌드하고 노드를 사용하여 백엔드 인터페이스를 개발하고 데이터베이스에 mysql을 사용하십시오.

타당성 분석

  • 결점:
  1. Nodejs는 단일 스레드이며 CPU 집약적인 작업을 수행할 수 없으므로 시간 조각이 해제되지 않고 후속 작업이 차단됩니다.
  2. nodejs의 신뢰도는 상대적으로 낮고, 한 곳에서 보고된 오류는 전체 프로그램이 충돌하는 원인이 되므로 데몬 프로세스나 도커를 다시 시작하여 해결해야 합니다.
  3. 예를 들어 멀티 코어 성능을 사용하는 경우 클러스터를 사용하거나 여러 인스턴스를 배포해야 하므로 번거롭습니다.
  4. 메모리는 기본적으로 0.7G 및 1.4G로 설정됩니다. 설정이 크면 가비지 수집 속도가 느려지고 여러 인스턴스를 더 배포해야 할 수 있습니다.
  • 이점:
  1. nodejs의 기본 비동기 io는 성능이 더 좋습니다.
  2. 스레딩 걱정 없이 쓰세요.
  3. 개발 속도가 빠르고 약한 유형의 언어가 더 유연하며 강력한 유형과 같이 다양한 변환이 필요하지 않으며 코드 양이 적습니다.
  4. 단일 페이지 응용 프로그램 ssr이 더 편리하고 컨텍스트가 동일합니다.
  • nodejs 서비스 보안에 대한 몇 가지 고려 사항
  1. 서버에서 nodejs 서비스에 대한 보안 보호를 잘 수행하는 방법은 무엇입니까?

지식 비축

  • Node.js : Google의 V8 엔진을 기반으로 하는 이벤트 기반 I/O 서버 측 JavaScript 환경입니다. 간단히 말해 Node.js  서버 측에서 실행되는 JavaScript입니다.
  • express : 간결하고 유연한 node.js 웹 애플리케이션 프레임워크로, 다양한 웹 애플리케이션과 풍부한 HTTP 도구를 만드는 데 도움이 되는 일련의 강력한 기능을 제공합니다. Express를 사용하여 완벽하게 작동하는 웹 사이트를 빠르게 구축하십시오.

    다음은 익스프레스 프레임워크와 함께 설치해야 하는 몇 가지 공통 모듈입니다.

  • body-parser  : JSON, Raw, Text 및 URL 인코딩 데이터를 처리하기 위한 node.js 미들웨어.
  • cookie-parser : 쿠키를 구문 분석하는 도구입니다. req.cookies를 통해 전달된 쿠키를 가져와 객체로 변환할 수 있습니다.
  • cookie-session: 세션 내용을 설정할 수 있는 세션 관리 도구
  • multer : enctype="multipart/form-data"로 양식 데이터를 처리하기 위한 Node.js 미들웨어(양식의 MIME 인코딩 설정).

프로젝트 빌드

이 부분 은 vue+node 프런트엔드 및 백엔드 분리 인터페이스 호출을     직접 참조합니다  (초보자).

리노베이션에 대해

일반 Vue 프로젝트 수정 제안:

  • 프런트 엔드 교차 도메인 구성
//vue.config.js

//定义常量
const NODEJS_SERVE_PREFIX = "/nserve" //Nodejs服务路径前缀标识

module.exports = {
    // 关闭检查
    lintOnSave: false,
    // 免提取CSS 文件,强制内联
    css: { extract: false },

    // // 在exports中添加,这里很关键,不配置不行
    transpileDependencies: ['element-ui'],


    chainWebpack(config) {
        // 在chainWebpack中添加下面的代码
        config.entry('main').add('babel-polyfill') // main是入口js文件
    },

//》》》开发阶段跨域配置看这里
    devServer: {
        overlay: { // 让浏览器 overlay 同时显示警告和错误
            warnings: true,
            errors: true
        },
        host: "localhost", //默认请求-主机地址
        port: 8888, // 默认请求-端口号
        https: false, // https:{type:Boolean}
        open: false, //配置自动启动浏览器
        hotOnly: true, // 热更新
        // proxy: 'http://localhost:3333'   // 配置跨域处理,只有一个代理
        proxy: { //配置多个跨域
            NODEJS_SERVE_PREFIX: {
                target: "http://localhost:3333",//你的NodeJS服务监听端口
                changeOrigin: true,
                // ws: true,//websocket支持
                secure: false,
                pathRewrite: {
                    '^/nserve': '/nserve' //此处不写也可以,看你实际情况
                }
            }
        }
    }
}

약간의 알림: 위와 같이 크로스 도메인 구성은 일반적으로 개발 단계(즉, 로컬)에서 크로스 도메인을 의미하며 온라인 구성은 Node.js 등을 통해 이루어집니다.

  • 관련 종속성 등록
npm i mysql -s
npm i express -s
npm i body-parser -s
npm i cookie-parser -s
npm i cookie-session -s
  • 주로 MySQL 연결 구성, 서비스 인터페이스 구성(인터페이스 경로 매핑 + 호출 및 반환 처리 등)을 포함하여 익스프레스 프레임워크를 사용하여 대화형 서비스의 특정 콘텐츠를 담당하는 JS를 정의합니다.
// nodeServe.js
//引入服务包
const express = require('express');
const mysql = require('mysql');

//配置MySQL连接池
const db = mysql.createPool({
    host: 'localhost',
    user: 'root',
    password: '123456',
    database: 'mydb'
});

//默认导出:定义接口
module.exports = () => {
    
    //接口路由
    const route = express.Router();

    /**
     * 用户接口(GET请求)
     */
    route.get('/user/query', (req, res) => {
        //解析请求参数
        let uid = req.query.uid;
        //定义SQL语句
        const sql = `SELECT * FROM user WHERE uid=` + uid;
        doDbQuery(sql,res)
    });

    /**
     * 用户接口(POST请求)
     */
    route.post('/user/save', (req, res) => {

        let mObj = {};
        for (let obj in req.body) {
            mObj = JSON.parse(obj);
        }
        let name = mObj.name;
        let age = mObj.age;
        const sql = `INSERT INTO user(name,age) VALUES('${name}','${age}')`;
        doDbQuery(sql, res);
    });

    /**
     * 执行SQL
     * @param insUserInfo
     * @param res
     */
    function doDbQuery(sql, res) {
        db.query(sql, (err, data) => {
            if (err) {
                //失败返回
                console.log(err);
                res.status(500).send({ 'msg': '服务器出错', 'status': 0 }).end();
            } else {
                //成功返回
                res.send(data);
            }
        });
    };
    
    return route;
}
  • 주로 도메인 간 구성, 수신 포트 구성, 인터페이스 라우팅 구성(즉, 이전 단계에서 서비스 JS 처리 가져오기), 쿠키 등을 포함하여 Nodejs 서비스 시작 구성을 담당하는 JS를 정의합니다.
//nodeApplication.js

//定义常量
const NODEJS_SERVE_PREFIX = "nserve" //Nodejs服务路径前缀标识
const express = require('express');
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');
const cookieSession = require('cookie-session');
const server = express();

server.use(bodyParser.urlencoded({ extended: false }));

//配置跨域
server.all('*', function(req, res, next) {
    res.header('Access-Control-Allow-Origin', req.header("origin"));//如果设置为"*",有时候还是会出现跨域问题(说一个神奇的事,甚至出现同一个项目,在不同时间点出现了不同的结果,我也不知道为啥,明明啥也没干)
    res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');
    res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');

    if (req.method === 'OPTIONS') {
        res.send(200);
        /make the require of options turn back quickly/
    } else {
        next();
    }
});

//配置NodeJS服务端口
server.listen(3333, () => {
    console.log("NodeJS服务已启动  监听端口:3333");

});

//中间数据管理
(() => {

    //处理cookie
    server.use(cookieParser());

    //处理session
    let keyArr = ['1','2'];
    server.use(cookieSession({
        name: "hc",
        keys: keyArr,
        maxAge: 30 * 60 * 1000
    }))

})();


//配置路由处理
server.use('/' + NODEJS_SERVE_PREFIX, require('./route/nodeServe.js')());
  • VUE 페이지에서 사용됨
let _this = this
_this.$http.get('/nserve/user/query').then((res)=>{
					_this.result= res.data;
				},(err)=>{
					console.log(err);
				})

시작하다

//启动NodeJS服务
node node nodeApplication.js

//启动前端
npm run serve

기타 참조 문서

프로젝트 사례 참조

Guess you like

Origin blog.csdn.net/qq_28202661/article/details/127300386