我使用Node JS和Express,每当我在postman 上运行带有此链接http://localhost:3500/balanceDue的GET请求时,它运行此方法getAllMoneyInTransact中的代码,而不是此方法getAllMoneyInTransactByDate中的代码.为什么会发生这种情况?,我想基于日期时间过滤器而不是所有内容来检索数据.谢谢.

以下是代码.

//moneyInController

const MoneyInData = require('../models/MoneyInData')
const asyncHandler = require('express-async-handler')


// @desc get MoneyIn Transaction
// @route GET '/moneyIn'
// @access Private
const getAllMoneyInTransact = asyncHandler(async (req, res) => {

    const creditTransact = await MoneyInData.find().select().lean()

    if (!creditTransact?.length) {
        return res.status(400).json({ message: 'No rescent transaction' })
    }
    res.json(creditTransact)


})

// @desc get MoneyIn Transaction
// @route GET '/balanceDue'
// @access Private
const getAllMoneyInTransactByDate = asyncHandler(async (req, res) => {
    let startDate = new Date()
    let endDate = new Date()

    startDate.setHours(0)
    endDate.setHours(24)

    const result = await MoneyInData.find(
        {
            createdAt: {
                $gte: startDate,
                $lte: endDate
            }
        }
    ).select('balanceDue').exec()
    console.log(result)


    if (!result?.length) {
        return res.status(400).json({ message: 'No rescent transaction' })
    }
    res.json(result)
    console.log(result)

})

// @desc create MoneyIn Transaction
// @route POST /moneyIn
// @access Private
const createMoneyInTransact = asyncHandler(async (req, res) => {

    const { totalAmountIn, amountRecieved, balanceDue, itemDescription, modeOfPayment } = req.body//newItems
    // const { productName, sellingPriceOfTotal, quantityCount, unitOfQuantity, sellingPrice}= req.body


    //confirm data
    if (!totalAmountIn || !amountRecieved || !balanceDue
        || !itemDescription || !modeOfPayment) {//|| !Array.isArray(newItems) || !newItems.length

        return res.status(400).json({ message: 'All fields are required' })
    }

    const moneyInObj = { totalAmountIn, amountRecieved, balanceDue, itemDescription, modeOfPayment }//newItems

    const newCreditTransact = await MoneyInData.create(moneyInObj)

    //  const newItemCreated = await NewItemsData.create({ productName, sellingPriceOfTotal, quantityCount, unitOfQuantity, sellingPrice,sales: newCreditTransact})

    if (newCreditTransact) {//created
        res.status(201).json({ message: 'New credit Transaction Recorded' })
    }
    else {
        res.status(400).json({ message: 'Invalid credit Transaction' })
    }

})

// @desc update MoneyIn Transaction
// @route patch /moneyIn
// @access Private
const updateMoneyInTransact = asyncHandler(async (req, res) => { })

// @desc update MoneyIn Transaction
// @route patch /moneyIn
// @access Private
const deleteMoneyInTransact = asyncHandler(async (req, res) => { })

module.exports = {
    getAllMoneyInTransact,
    createMoneyInTransact,
    updateMoneyInTransact,
    deleteMoneyInTransact,
    getAllMoneyInTransactByDate
}


//Router
//moneyInRouter


const express = require('express')
const router = express.Router()
const moneyInController = require('../contollers/moneyInController')

router.route('/balanceDue')
      .get(moneyInController.getAllMoneyInTransactByDate)
router.route('/')
      .get(moneyInController.getAllMoneyInTransact)
      .post(moneyInController.createMoneyInTransact)
      .patch(moneyInController.updateMoneyInTransact)
      .delete(moneyInController.deleteMoneyInTransact)
module.exports = router


//Root


root.js
const express = require('express');
const router = express.Router();
const path = require('path');


router.get('^/$|/index(.html)?', (req, res) => {
    res.sendFile(path.join(__dirname, '..','views','index.html'))
} );

module.exports = router;


//Server


require('dotenv').config()
const express = require("express")
const app = express()
const path = require('path')
const errorHandler = require('./middleware/errorHandler')
const cookieparser = require('cookie-parser')
const { logger } = require('./middleware/logger')
const cors = require('cors')
const connectDB = require('./config/dbConn')
const mongoose = require('mongoose')
const { logEvents } = require('./middleware/logger')
const corsOptions = require('./config/allowedOrigin')
const PORT = process.env.PORT || 3500;

console.log(process.env.NODE_ENV)

connectDB()

app.use(logger)

app.use(cors(corsOptions))

app.use(express.json())

app.use(cookieparser())

app.use('/', express.static(path.join(__dirname, 'public')))

app.use('/', require('./routes/root'))// mounts the specified middleware functions at the path which is being specified

app.use('/balanceDue', require('./routes/moneyInRoutes'))

app.use('/moneyIn', require('./routes/moneyInRoutes'))

app.use('/newItems', require('./routes/newItemsRoutes'))

app.use('/users', require('./routes/userRoutes'))

app.all('*', (req, res) => {
  res.status(404);
  if (req.accepts('html')) {
    res.sendFile(path.join(__dirname, 'views', '404.html'))
  } else if (req.accepts('json')) {
    res.json({ message: '404 page not found' })
  } else {
    res.type('txt').send('404 Not Found')
  }
});

app.use(errorHandler)

mongoose.connection.once('open', () => {
  console.log('connected to MongoDB')
  app.listen(PORT, () => console.log(`Server running on port ${PORT}`))

})

mongoose.connection.on('error', err => {
  console.log(err)
  logEvents(`${err.no}: ${err.code}\t${err.syscall}\t${err.hostname}`, 'mongoErrLog.logs')

})



推荐答案

您已在此处将moneyInRoutes路由安装到http://localhost:3500/balanceDue:

app.use('/balanceDue', require('./routes/moneyInRoutes'))

这意味着您在moneyInRouter implicitly中的所有路由处理器都以/balanceDue开头.这意味着,如果您希望调用getAllMoneyInTransactByDate函数,则需要将postman 请求发送到:

http://localhost:3500/balanceDue/balanceDue

在您发布到http://localhost:3500/balanceDue的那一刻,因此在您的moneyInRouter中,它匹配的所有内容都是挂载路径/的根,因此它将路由到以下位置:

router.route('/')
      .get(moneyInController.getAllMoneyInTransact)

为了避免混淆,我的建议是将您的路由从以下位置更改:

router.route('/balanceDue')

对此:

router.route('/dueByDate')

然后发布到

http://localhost:3500/balanceDue/dueByDate

Javascript相关问答推荐

如何在react-Router-dom 6中Forking 路由?

如何按预期聚合SON数据?

React:未调用useState变量在调试器的事件处理程序中不可用

有什么(最佳)方法可以从模块中获取脚本模块的多姆元素吗?

如何为GrapesJS模板编辑器创建自定义撤销/重复按钮?

我应该绑定不影响状态的函数吗?'

将2D数组转换为图形

使用i18next在React中不重新加载翻译动态数据的问题

如何粗体匹配的字母时输入搜索框使用javascript?

使用useEffect,axios和useParams进行react测试

自定义高图中的x轴标签序列

用于编辑CSS样式的Java脚本

Reaction Native中的范围滑块

如何在JAVASCRIPT中合并两组对象并返回一些键

MongoDB受困于太多的数据

为什么在函数中添加粒子的速率大于删除粒子的速率?

FireBase云函数-函数外部的ENV变量

Phaser3 preFX addGlow不支持zoom

处理app.param()中的多个参数

如何让SVG图标在被点击和访问后改变 colored颜色 ,并在被访问后取消点击时恢复到原来的 colored颜色 ?