mongodb 尝试将请求从前端发送到后端,但出现端点404错误

jogvjijk  于 2023-11-17  发布在  Go
关注(0)|答案(1)|浏览(203)

我正在从前端向后端发送一个POST请求。我得到一个错误“错误:请求失败,状态代码为404““有问题POST到后端,端点“
我试图理解为什么post请求没有到达后端.
这是前端代码-触发onAddingNewTrade函数的组件的一部分

<div className='transaction-new-trade-container input-container-style-dash'>
               <h2>Add new trade</h2>
               <label>Stock symbol</label>
               <input
                  type='text'
                  value={newTrade.symbol}
                  name='symbol'
                  onChange={handleInputChange}
               />

               <label>Shares amount</label>
               <input
                  type='number'
                  value={newTrade.amount === 0 ? '' : newTrade.amount}
                  name='amount'
                  onChange={handleInputChange}
               />

               <label>Entry price</label>
               <input
                  type='number'
                  value={newTrade.entryPrice === 0 ? '' : newTrade.entryPrice}
                  name='entryPrice'
                  onChange={handleInputChange}
               />

               <label>Exit price</label>
               <input
                  type='number'
                  value={newTrade.exitPrice === 0 ? '' : newTrade.exitPrice}
                  name='exitPrice'
                  onChange={handleInputChange}
               />
               <button
                  className='btn-style-3'
                  onClick={() => onAddingNewTrade(newTrade)}
               >
                  Add new trade
               </button>
            </div>

字符串
这是onAddingNewTrade函数

function onAddingNewTrade(newTrade) {
      newTrade.day = utilService.getDate()
      newTrade.pl = tradeService.calculatePL(
         newTrade.symbol,
         newTrade.amount,
         newTrade.entryPrice,
         newTrade.exitPrice
      )
      newTrade.percentage = tradeService.calculatePercentageChange(
         newTrade.entryPrice,
         newTrade.exitPrice
      )
      newTrade.timestamp = Date.now()
      addTrade(newTrade)
   }


这是addTrade函数

export async function addTrade(trade) {
   try {
      const savedTrade = await tradeService.save(trade)
      console.log('Added Trade', savedTrade)
      store.dispatch(getActionAddTrade(savedTrade))
      return savedTrade // maybe no need for it - consider removing later
   } catch (err) {
      console.log('Cannot add trade', err)
      throw err
   }
}


这是从前端发送post请求到后端的函数

async function save(trade) {
   var savedTrade
   if (trade._id) {
      savedTrade = await httpService.put(`trade/${trade._id}`, trade) // if trade has Id so update
   } else {
      console.log('sending request to backend', trade)
      savedTrade = await httpService.post('/trade', trade) // if trade does not has id create add new trade
   }
   return savedTrade
}


这是来自NODE.JS中的服务器文件的贸易路线

app.use('/api/trade', tradeRoutes)


这是贸易路线文件

import express from 'express'
import { requireAuth } from '../../middlewares/requireAuth.middleware.mjs'
import { log } from '../../middlewares/logger.middleware.mjs'
import { getTrades, getTradeById, addTrade, updateTrade, removeTrade, addTradeMsg, removeTradeMsg } from './trade.controller.mjs'

const router = express.Router()

// We can add a middleware for the entire router:
// router.use(requireAuth)

router.get('/', log, getTrades)
router.get('/:id', getTradeById)
router.post('/trade',requireAuth, addTrade) // add new trade
router.put('/:id', requireAuth, updateTrade) // update existing trade
router.delete('/:id', requireAuth, removeTrade)
// router.delete('/:id', requireAuth, requireAdmin, removeTrade)

router.post('/:id/msg', requireAuth, addTradeMsg)
router.delete('/:id/msg/:msgId', requireAuth, removeTradeMsg)

export const tradeRoutes = router


这是addTrade函数

export async function addTrade(req, res) {
  const {loggedinUser} = req
  console.log('from front', req.body)
  try {
    const trade = req.body
    trade.owner = loggedinUser
    const addedTrade = await tradeService.add(trade)
    res.json(addedTrade)
  } catch (err) {
    logger.error('Failed to add trade', err)
    res.status(400).send({ err: 'Failed to add trade' })
  }
}

ogsagwnx

ogsagwnx1#

我把这个放在一个答案中,因为我不能在注解中使用字符串插值语法。
您已在此处安装路由器:

app.use('/api/trade', tradeRoutes)

字符串
这意味着tradeRoutes中的任何内容都以/api/trade隐式开头。这意味着:

router.post('/trade',requireAuth, addTrade);


响应来自以下位置的post请求:

/api/trade/trade


所以你需要post来:

savedTrade = await httpService.post('/api/trade/trade', trade)


put

savedTrade = await httpService.put(`/api/trade/trade/${trade._id}`, trade)

备注:可能你正在使用一个框架,它在内部将前端请求Map到/api,但你的标签只建议使用React和Express。

相关问题