Node.js Express搭建项目个人使用记录

一、新建项目文件夹 myapp 作为项目的文件夹

二、新建index.js作为项目的初始文件

(一)、在index.js文件同级新建一个package.json文件作为项目的配置文件,其中需要配置的基础文件如下:



{

  "name": "myapp",

  "version": "1.0.0",

  "description": "",

  "main": "index.js",

  "scripts": {

    "test": "echo \"Error: no test specified\" && exit 1",

    "nodemon": "nodemon ./index.js"

  },

  "author": "",

  "license": "ISC",

  "dependencies": {

    "body-parser": "^1.19.0",

    "connect-multiparty": "^2.2.0",

    "core-js": "^3.2.1",

    "cors": "^2.8.5",

    "express": "^4.17.1",

    "jsonwebtoken": "^8.5.1",

    "jwt-simple": "^0.5.6",

    "moment": "^2.24.0",

    "mysql": "^2.17.1",

    "nodemon": "^1.19.2",

    "register-service-worker": "^1.6.2"

  }

(二)、index.js文件内主要做引入用,做为文件的入口文件,如下:

const express = require('express')

const app = express()

const path=require('path')

const fs=require('fs')

const cors = require('cors')

app.use(cors())

//注册中间件,拿到res.body的内容    

const bodyParser=require("body-parser")

app.use(bodyParser.urlencoded({extended:false}))

app.use(bodyParser.json())

// 引入路由

// 使用循环的方式readdir 查询目录 进行路由的注册

fs.readdir(path.join(__dirname,"./router"),(err,filenames)=>{

    if(err) return console.log("读取路由失败");

    // console.log(filenames);

    //循环每一个文件名 循环一次拼接出一个完整的路由模块 然后使用require导入这个路由模块

    filenames.forEach(fname=>{

        const router=require(path.join(__dirname,'./router',fname))

        app.use(router)

    })

})

app.listen(3000, () => console.log('http://localhost:3000'))

//这里的app.listen(300,()=>conslole.log(' http://localhost:3000 '))是暴露链接地址  在前端直接引入

前端是用的Vue-cli3.0搭建的项目   在API / server.js里面写接口的   引入如下:

import axios from 'axios'; axios.defaults.baseURL="http://192.168.2.52:3000" axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';


(三)、新建router文件分发路由:(在上文index.js中已经介绍了引入router文件导出接口的方法)

const express=require('express')

const router=express.Router()

const ctrl=require("../controller/stu")

// 拿到所有的数据

router.get('/getallclass',ctrl.getallclass)

router.post('/getcom',ctrl.getcom)

router.get('/getmeclsaa',ctrl.getmeclsaa)

router.post('/getmodify',ctrl.getmodify)

router.get('/getagemax',ctrl.getagemax)

router.get('/getclass',ctrl.getclass)

router.get('/getmodstu',ctrl.getmodstu)

module.exports=router

(四)、新建自己的页面写接口和SQL语句   我这里写的是stu   从上面可以看出来  在router中已经引入了stu.js这个文件   而在stu.js里面  则需要我们链接到数据库并且在页面的最下面暴露这个页面写的接口方便router来获取到这个接口

// 引入数据库

const conn=require("../db/sql")

// 写sql语句拿到数据

const getallclass=(req,res)=>{

    const headMaster=req.query.headMaster

    const monitor=req.query.monitor

    const subordinateClass=req.query.subordinateClass

    var currentPage=req.query.pageNum;

    var size=req.query.pageSize;

    // var sql8='select * FROM class where 1=1 '

    var sql8=`SELECT m.*,

    (SELECT count(id) FROM (SELECT

com.id,com.competition_type competitionType,com.competition_user competitionUser,com.ranking,com.subordinate_class subordinateClass,

cls.floor,cls.headMaster,cls.monitor,cls.number

FROM

competition com

LEFT JOIN class cls ON com.subordinate_class = cls.className) t) AS total

FROM (SELECT

com.id,com.competition_type competitionType,com.competition_user competitionUser,com.ranking,com.subordinate_class subordinateClass,

cls.floor,cls.headMaster,cls.monitor,cls.number

FROM

competition com

LEFT JOIN class cls ON com.subordinate_class = cls.className) m where 1=1 ` 

    if(headMaster!=''){

         sql8=`SELECT m.*,

         (SELECT count(id) FROM (SELECT

     com.id,com.competition_type competitionType,com.competition_user competitionUser,com.ranking,com.subordinate_class subordinateClass,

     cls.floor,cls.headMaster,cls.monitor,cls.number

     FROM

     competition com

     LEFT JOIN class cls ON com.subordinate_class = cls.className) t where headMaster='${headMaster}') AS total

     FROM (SELECT

     com.id,com.competition_type competitionType,com.competition_user competitionUser,com.ranking,com.subordinate_class subordinateClass,

     cls.floor,cls.headMaster,cls.monitor,cls.number

     FROM

     competition com

     LEFT JOIN class cls ON com.subordinate_class = cls.className) m where 1=1 and headMaster='${headMaster}'`

    }

    if(monitor!=''){

        sql8=`SELECT m.*,

        (SELECT count(id) FROM (SELECT

    com.id,com.competition_type competitionType,com.competition_user competitionUser,com.ranking,com.subordinate_class subordinateClass,

    cls.floor,cls.headMaster,cls.monitor,cls.number

    FROM

    competition com

    LEFT JOIN class cls ON com.subordinate_class = cls.className) t where monitor='${monitor}') AS total

    FROM (SELECT

    com.id,com.competition_type competitionType,com.competition_user competitionUser,com.ranking,com.subordinate_class subordinateClass,

    cls.floor,cls.headMaster,cls.monitor,cls.number

    FROM

    competition com

    LEFT JOIN class cls ON com.subordinate_class = cls.className) m where 1=1 and monitor='${monitor}'`

    }

    if(subordinateClass!=''){

        sql8=`SELECT m.*,

        (SELECT count(id) FROM (SELECT

    com.id,com.competition_type competitionType,com.competition_user competitionUser,com.ranking,com.subordinate_class subordinateClass,

    cls.floor,cls.headMaster,cls.monitor,cls.number

    FROM

    competition com

    LEFT JOIN class cls ON com.subordinate_class = cls.className) t where subordinateClass=${subordinateClass}) AS total

    FROM (SELECT

    com.id,com.competition_type competitionType,com.competition_user competitionUser,com.ranking,com.subordinate_class subordinateClass,

    cls.floor,cls.headMaster,cls.monitor,cls.number

    FROM

    competition com

    LEFT JOIN class cls ON com.subordinate_class = cls.className) m where 1=1 and subordinateClass=${subordinateClass} `

    }

    sql8+=`limit ${(currentPage-1)*size},${size}`


    conn.query(sql8,(err,result)=>{

        if(err) return res.send({starus:400,message:"查询失败"})

        res.send({status:200,message:'请求成功',data:result})

    })

}

//新增学生参加比赛信息

const getcom=(req,res)=>{

    const body=req.body

    var sql81=`insert into competition(competition_type,competition_user,ranking,subordinate_class) values(${body.competition_type},'${body.competition_user}',${body.ranking},${body.subordinate_class})`


    conn.query(sql81,(err,result)=>{

        if(err) return res.send({starus:401,message:'新增失败'})

        res.send({status:200,message:'新增成功',data:result})

    })

}

//选择班级后获取到对应的班级信息

const getmeclsaa=(req,res)=>{

    const subordinateClass=req.query.subordinateClass

    var sql12=`SELECT * FROM class WHERE className=${subordinateClass}`

    conn.query(sql12,(err,result)=>{

        if(err) return res.send({starus:400,message:"查询失败"})

        res.send({status:200,message:'请求成功',data:result})

    })

}

//修改比赛信息

const getmodify=(req,res)=>{

    const body=req.body

    var sql82=`UPDATE competition SET competition_user='${body.competition_user}', ranking=${body.ranking},competition_type=${body.competition_type},subordinate_class=${body.subordinate_class} WHERE id=${body.id}`

    console.log(sql82);


    conn.query(sql82,(err,result)=>{

        if(err) return res.send({starus:401,message:'修改失败'})

        res.send({status:200,message:'修改成功',data:result})

    })

}

//查询年龄在十八岁以上的

const getagemax=(req,res)=>{

    var age=req.query.age;

    const sql1=`SELECT * from stuclass WHERE age>${age}`

    conn.query(sql1,(err,result)=>{

        if(age=='') return res.send({starus:200,message:'null'})

        if(err) return res.send({starus:401,message:'查询失败'})

        res.send({status:200,message:'请求成功',data:result})

    })

}

//查询学生所在班级

const getclass=(req,res)=>{

    const sql2=`SELECT * from  (SELECT s.*,c.name as className FROM stuclass s LEFT JOIN class c ON s.cid = c.id) t WHERE t.className='一(1)'`

    conn.query(sql2,(err,result)=>{

        if(err) return res.send({starus:403,message:'查询失败'})

        res.send({code:200,message:'请求成功',data:result})

    })

}

//修改学生年龄

const getmodstu=(req,res)=>{

    const num=req.query.num

    const ageChang=req.query.ageChang

    const sql3=`UPDATE stuclass  SET age = ${ageChang} WHERE age < ${num}`

    conn.query(sql3,(err,result)=>{

        if(err) return res.send({starus:403,message:'查询失败'})

        res.send({code:200,message:'请求成功',data:result})

    })

}

module.exports={

    getallclass,

    getcom,

    getmodify,

    getmeclsaa,

    getagemax,

    getclass,

    getmodstu

}

(五)、最后我们来看一下引入数据库是如何操作的

const mysql=require("mysql");

const conn=mysql.createConnection({

    host:"localhost",    //这里是链接数据库   我的是本地启动的  所以是localhost

    user:"root",             //输入mysql用户名

    password:"root",       //输入mysql密码

    database:"new_text"     //这里是输入的库名

})

module.exports=conn

三、以上就是node.js express框架写接口的大概流程   源码都贴出来了,应该很好理解

我这里是自己写的前后端项目    试着写的node.js     肯定还有不到位的地方

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,884评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,212评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,351评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,412评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,438评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,127评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,714评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,636评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,173评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,264评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,402评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,073评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,763评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,253评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,382评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,749评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,403评论 2 358

推荐阅读更多精彩内容