簡體   English   中英

TypeError:無法解構“req.body”的屬性“userId”,因為它未定義

[英]TypeError: Cannot destructure property 'userId' of 'req.body' as it is undefined

每次我嘗試在 postman 到http://localhost:3000/api/orders/new中發送請求

我收到此錯誤:**TypeError:無法解構“req.body”的屬性“userId”,因為它未定義。 在 C:\Users\Web-Developer\Desktop\shoppy\backend\routes\orders.js:70:10 在 Layer.handle [as handle_request] (C:\Users\Web-Developer\Desktop\shoppy\backend\node_modules \express\lib\router\layer.js:95:5) 在下一個 (C:\Users\Web-Developer\Desktop\shoppy\backend\node_modules\express\lib\router\route.js:137:13) 在Route.dispatch (C:\Users\Web-Developer\Desktop\shoppy\backend\node_modules\express\lib\router\route.js:112:3) 在 Layer.handle [as handle_request] (C:\Users\Web -Developer\Desktop\shoppy\backend\node_modules\express\lib\router\layer.js:95:5) 在 C:\Users\Web-Developer\Desktop\shoppy\backend\node_modules\express\lib\router\index .js:281:22 在 Function.process_params (C:\Users\Web-Developer\Desktop\shoppy\backend\node_modules\express\lib\router\index.js:335:12) 在下一個 (C:\Users\ Web-Developer\Desktop\shoppy\backend\node_modules\express\lib\router\index.js:275:10) 在 Function.handle (C:\Users\Web-Developer\Desktop\shoppy\backend\node_modules\express\庫\ router\index.js:174:3) 在路由器 (C:\Users\Web-Developer\Desktop\shoppy\backend\node_modules\express\lib\router\index.js:47:12) **

const router = express.Router();
const {database} = require('../config/helpers');

/* GET ALL ORDERS */
router.get('/', (req, res) => {
    database.table('orders_details as od')
        .join([
            {
                table: 'orders as o',
                on: 'o.id = od.order_id'
            },
            {
                table: 'products as p',
                on: 'p.id = od.product_id'
            },
            {
                table: 'users as u',
                on: 'u.id = o.user_id'
            }
        ])
        .withFields(['o.id', 'p.title as name', 'p.description', 'p.price', 'u.username'])
        .sort({id: 1})
        .getAll()
        .then(orders => {
            if(orders.length > 0) {
                res.status(200).json(orders);
            } else {
                res.json({message: 'Mo Orders Found'})
            }
        }).catch(err => console.log(err));
})


/* GET SINGLE ORDER */
router.get('/:id', (req, res) => {

    const orderId = req.params.id;

    database.table('orders_details as od')
        .join([
            {
                table: 'orders as o',
                on: 'o.id = od.order_id'
            },
            {
                table: 'products as p',
                on: 'p.id = od.product_id'
            },
            {
                table: 'users as u',
                on: 'u.id = o.user_id'
            }
        ])
        .withFields(['o.id', 'p.title as name', 'p.description', 'p.price', 'u.username'])
        .filter({'o.id': orderId})
        .getAll()
        .then(orders => {
            if(orders.length > 0) {
                res.status(200).json(orders);
            } else {
                res.json({message: `No Orders Found with orderId ${orderId}`})
            }
        }).catch(err => console.log(err));
})

/* PLACE A NEW ORDER */
router.post('/new', (req, res) => {

    let {userId, products} = req.body;
    console.log(userId, products)
})

module.exports = router

這是解決方案...耶耶!

不需要安裝 body-parser。

嘗試這個:

app.use(express.json())

並在您的路線之前指定它,例如:

(順序在這里真的很重要!)

app.use(express.json());
app.use('/api', Anyroute)
app.use(bodyParser.json()) // for parsing application/json
app.use(bodyParser.urlencoded({ extended: true }))

我發現在指定路由路徑之前需要使用此代碼。

您可能缺少bodyParser

const bodyParser = require('body-parser')

app.use(bodyParser.json()) // for parsing application/json

確保將數據作為原始數據和JSON 傳遞,如下圖所示。

在此處輸入圖像描述

在我的server.ts我有

app.use('/admin', adminRoutes);
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }))

這給出了錯誤消息。 更改為

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }))
app.use('/admin', adminRoutes);

讓它工作。 正如 OP 在評論中所說,順序必須首先是 body-parser,然后是路徑。

添加以下中間件

// middlewares
app.use(express.json)
app.use(cors)
app.use(express.urlencoded({ extended: true }));

快遞。 urlencoded() function 是 Express 中內置的中間件 function。 它使用 urlencoded 有效負載解析傳入的請求,並且基於 body-parser。

你應該在 app.use(router) 之前使用 app.use(express.json())。 中間件的順序很重要。

在 index.js 中的模型聲明之后添加這些行

app.use(express.json())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM