首页 > 编程语言 >node express mvc router 简单目录结构笔记

node express mvc router 简单目录结构笔记

时间:2023-06-12 23:34:48浏览次数:50  
标签:node status req const res express mvc tours id

 

 

 

 

 

 

只用来参考的

 

 

app.js

const express = require('express');
const morgan = require('morgan');
const tourRouter = require('./routes/tourRoutes');
const userRouter = require('./routes/userRoutes');

const app=express();


// 1 middleware
if(process.env.NODE_ENV==='development'){
    app.use(morgan('dev'))
}
app.use(express.json());
app.use(express.static(`${__dirname}/public`))


// 2
// const tours = JSON.parse(fs.readFileSync(`${__dirname}/dev-data/data/tours-simple.json`));

// app.get('/api/v1/tours',getAllTours);
// app.get('/api/v1/tours/:id',getTours)
// app.post('/api/v1/tours',createTours)
// app.patch('/api/v1/tours/:id',updateTour)
// app.delete('/api/v1/tours/:id',deleteTours)

//3 ROUTES
app.use('/api/v1/tours',tourRouter)
app.use('/api/v1/users',userRouter)


module.exports=app;
// 4  START SERVER

 

 

server.js

const dotenv = require('dotenv');
const mongoose = require('mongoose')
const app = require('./app');
dotenv.config( { path:'./config.env' });
// console.log(process.env)
// console.log(process.env.PORT)

const port=3000 || process.env.PORT;
app.listen(port,()=>{
    console.log(`App runing on port ${port}....`);
});

 

 

package.json

{
  "name": "4-natours",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start:prod": "set NODE_ENV=production && nodemon server.js",
    "start:dev": "nodemon server.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "dotenv": "^16.0.3",
    "express": "^4.18.2",
    "mongoose": "^7.2.1",
    "morgan": "^1.10.0",
    "prettier": "^2.8.8"
  }
}

跑起来是

node run start

 

 

 

 

 

 

 

 

routes.js

tourRoutes.js

const express = require('express');
const tourController=require('./../controller/tourController')
const tourRouter =express.Router();


tourRouter.param('id',tourController.checkID)

//Create a checkbody middleware
//Check if body contains the name and price property
//If not, send back 400 ()
//add it to the post bandler stack


tourRouter
.route('/')
.get(tourController.getAllTours)
.post(tourController.checkBody,tourController.createTours)

tourRouter.route('/:id')
.get(tourController.getTours)
.patch(tourController.updateTour)
.delete(tourController.deleteTours)

module.exports=tourRouter;

userRouter.js

const express = require('express');
const tourController=require('./../controller/tourController')
const tourRouter =express.Router();


tourRouter.param('id',tourController.checkID)

//Create a checkbody middleware
//Check if body contains the name and price property
//If not, send back 400 ()
//add it to the post bandler stack


tourRouter
.route('/')
.get(tourController.getAllTours)
.post(tourController.checkBody,tourController.createTours)

tourRouter.route('/:id')
.get(tourController.getTours)
.patch(tourController.updateTour)
.delete(tourController.deleteTours)

module.exports=tourRouter;

 

 

 

 

 

 

 

 

 

 

***************MVC**********************

 

 

 

 

 

controler

tourController.js

const fs = require('fs');



const tours = JSON.parse(fs.readFileSync(`${__dirname}/../dev-data/data/tours-simple.json`));


exports.checkID = (req,res,next,val)=>{
    console.log(`Tour id is : ${val}`)
    if(req.params.id * 1 > tours.length){
        return res.status(404).json({
            status:'fail',
            message:'Invalid ID'
        })
    }
    next()
}



exports.checkBody = (req,res,next)=>{
    if(!req.body.name || !req.body.price){
        return res.status(400).json({
            status:'fail',
            message:'Missing name or price'
        })
    }
    next()
}



exports.getAllTours=(req,res)=>{
    res.status(200).json({
        status:'sucess',
        data:{
            tours:tours
        }
    })
}

exports.getTours=(req,res)=>{
    console.log(req.params)
    const id=req.params.id *1
    const tour= tours.find(el=>el.id===id)

    res.status(200).json({
        status:'sucess',
        data:{
            tour:tour
        }
    })
}

exports.createTours=(req,res)=>{
    const newId = tours[tours.length -1].id+1;
    const newTour =Object.assign({id:newId},req.body);

    tours.push(newTour);
    fs.writeFile(`${__dirname}/dev-data/data/tours-simple.json`,JSON.stringify(tours),err=>{
            res.status(201).json({
                status:'success',
                data:{
                    tours:newTour
                }
            })
    })
}


exports.updateTour=(req,res)=>{
    res.status(200).json({
        status:'success',
        data:{
            tour:'<Update tour here ...>'
        }
    })
}


exports.deleteTours=(req,res)=>{
  
    res.status(204).json({
        status:'success',
        data:null
    })
}

userController.js

const fs = require('fs');

const tours = JSON.parse(fs.readFileSync(`${__dirname}/../dev-data/data/tours-simple.json`));


exports.getAllUser = (req,res)=>{
    res.status(500),json({
        status:'error',
        messages:'this route is not yer'
    })
}
exports.getUser=(req,res)=>{
    console.log(req.params)
    const id=req.params.id *1
    const tour= tours.find(el=>el.id===id)
    if(!tour){
        return res.status(404).json({
            status:'fail',
            message:'invalid ID'
        })
    }
   
    res.status(200).json({
        status:'sucess',
        data:{
            tour:tour
        }
    })
}

exports.createUser=(req,res)=>{
    const newId = tours[tours.length -1].id+1;
    const newTour =Object.assign({id:newId},req.body);

    tours.push(newTour);
    fs.writeFile(`${__dirname}/dev-data/data/tours-simple.json`,JSON.stringify(tours),err=>{
            res.status(201).json({
                status:'success',
                data:{
                    tours:newTour
                }
            })
    })
}


exports.updateUser=(req,res)=>{
    if(req.params.id * 1 > tours.length){
        return res.status(404).json({
            status:'fail',
            message:'invalid ID'
        })
    }
    res.status(200).json({
        status:'success',
        data:{
            tour:'<Update tour here ...>'
        }
    })
}


exports.deleteUser=(req,res)=>{
    if(req.params.id * 1 > tours.length){
        return res.status(404).json({
            status:'fail',
            message:'Invalid ID'
        })
    }
    res.status(204).json({
        status:'success',
        data:null
    })
}

 

 

 

 

 

data

M

/* eslint-disable */
const tour5 = {
  id: 5,
  name: 'The Sports Lover',
  startLocation: 'California, USA',
  nextStartDate: 'July 2021',
  duration: 14,
  maxGroupSize: 8,
  difficulty: 'difficult',
  avgRating: 4.7,
  numReviews: 23,
  regPrice: 2997,
  shortDescription:
    'Surfing, skating, parajumping, rock climbing and more, all in one tour',
  longDescription:
    'Nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\nVoluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur!'
};

 

 

 

标签:node,status,req,const,res,express,mvc,tours,id
From: https://www.cnblogs.com/hechunfeng/p/17476346.html

相关文章

  • MVC 模式和三层架构
    1.MVC模式‍MVC模式和三层架构是一些理论的知识,将来我们使用了它们进行代码开发会让我们代码维护性和扩展性更好。‍MVC是一种分层开发的模式,其中:M:Model,业务模型,处理业务V:View,视图,界面展示C:Controller,控制器,处理请求,调用模型和视图​​‍控制器(serlvlet)用来接收浏......
  • 【node开发】node.js在项目中使用的常见语法
    node.js在项目中使用的常见语法//Process模块//内置模块,直接使用constprocess=require('process');//获取终端输入的参数constargs=process.argv.slice(2);//获取全局变量constdata=process.env.VUE_APP_BASE_URL//返回当前系统信息constsystem=pr......
  • 通用mapping实现的SSM项目:SSM 框架:是 Spring + Spring MVC + MyBatis
    1.结合通用mapping实现的SSM项目:SSM框架:是Spring+SpringMVC+MyBatis的缩写mybatisgenerator:配置插件通用mapper:tk.mybatis2.MyBatis逆向工程组件是MyBatisGenerator,简称MBG,是专为MyBatis框架制定代码自动生成解决方案,MBG可以根据数据表结构快速生成对应的实体类......
  • ChatGPT学习心得一(使用node+react做了一个案例)
    ChatGPT学习心得一(使用node+react做了一个案例) 项目地址http://chat.xutongbao.top项目截图编辑编辑编辑 编辑编辑使用技术栈node+SQLite+redis+nginx+log4js+express+jenkins+cdn+react+antd+react-scrollbars-custom+iconfont+webpack+postman+axios+redux+immut......
  • Win7使用最新的node.js(版本18.16.0)
    截至本文的发布时间2023.06.11,前端开发基础工具node.js的最新版本是18.16.0LTS可能有人要问,为什么要研究node.js在Win7系统下的兼容情况呢?你直接用Win10不就行了?如果你可以直接使用Win10,显然你不是这篇文章的推荐阅读对象,因为某些开发环境比较特殊,只能使用Win7而不允许使用Win......
  • spring-mvc3 源码分析
    1,进入sevlet的service方法publicvoidservice(ServletRequestreq,ServletResponseres)throwsServletException,IOException{HttpServletRequestrequest;HttpServletResponseresponse;try{request=(HttpServletRequest)req;......
  • vue报错Invalid VNode type: undefined
    报错项目启动后,部分内容没有显示出来。打开console后,显示[Vuewarn]:InvalidVNodetype:undefined(undefined)处理引入“defineAsyncComponent”实现异步引入。import{defineAsyncComponent}from'vue'。问题解决了。......
  • Swap Nodes in Pairs
    SourceProblemGivenalinkedlist,swapeverytwoadjacentnodesandreturnitshead.ExampleGiven1->2->3->4,youshouldreturnthelistas2->1->4->3.ChallengeYouralgorithmshoulduseonlyconstantspace.Youmaynotmodifythe......
  • graalvm nodejs + spire office 实现office 处理
    实际上是一个比较简单的处理,主要是利用了graalvm的nodejs可以方便的使用外部jar,我们就可以使用其他nodejsweb框架,结合spireoffice实现专业可靠的office转换处理预备主要是安装graalvm以及nodejsgraalvm已经不支持包含nodejs了,需要独立安装参考对于grralvm安装使用......
  • node.js详细介绍,node.js常用面试题
    Node.js是一个基于ChromeV8引擎的JavaScript运行时,可以让JavaScript在服务器端运行,实现了JavaScript的后端开发能力。Node.js采用事件驱动、非阻塞I/O模型,可以处理大量并发连接,适合构建高性能、可扩展的网络应用程序。以下是一些常见的Node.js面试题:1.什么是No......