首页 > 解决方案 > 如何使用 nodejs 从 req.body 发送数据

问题描述

如何使用 nodejs 从正文发送数据?

我正在 node.js 中编写代码,其中用户在正文中输入数据。并基于该输入,程序从数据库中获取数据并以 JSON 格式显示。

我写了以下代码:

 app.post('/city', (req,res) => {

    var id = parseInt(req.body.id);
    pool.connect(function (err, client, done) {
        if (err) {
            console.log("Can not connect to the DB" + err);
        }
        client.query(`SELECT * FROM city WHERE state_id=${id}`, function (err, result) {
             done();
             if (err) {
                 console.log(err);
                 res.status(400).send(err);
             }
             res.status(200).send(result.rows);
        })
    })  

});

我觉得 var 有问题id = parseInt(req.body.id);。因为,当我运行代码时,它说它无法识别 id?

另外,当我在 Postman 中运行它时,我收到以下错误:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Error</title>
    </head>
    <body>
        <pre>TypeError: Cannot read property &#39;id&#39; of undefined
            <br> &nbsp; &nbsp;at app.post (F:\DatabaseProject15\routes\common.js:36:32)
            <br> &nbsp; &nbsp;at Layer.handle [as handle_request] (F:\DatabaseProject15\node_modules\express\lib\router\layer.js:95:5)
            <br> &nbsp; &nbsp;at next (F:\DatabaseProject15\node_modules\express\lib\router\route.js:137:13)
            <br> &nbsp; &nbsp;at Route.dispatch (F:\DatabaseProject15\node_modules\express\lib\router\route.js:112:3)
            <br> &nbsp; &nbsp;at Layer.handle [as handle_request] (F:\DatabaseProject15\node_modules\express\lib\router\layer.js:95:5)
            <br> &nbsp; &nbsp;at F:\DatabaseProject15\node_modules\express\lib\router\index.js:281:22
            <br> &nbsp; &nbsp;at Function.process_params (F:\DatabaseProject15\node_modules\express\lib\router\index.js:335:12)
            <br> &nbsp; &nbsp;at next (F:\DatabaseProject15\node_modules\express\lib\router\index.js:275:10)
            <br> &nbsp; &nbsp;at expressInit (F:\DatabaseProject15\node_modules\express\lib\middleware\init.js:40:5)
            <br> &nbsp; &nbsp;at Layer.handle [as handle_request] (F:\DatabaseProject15\node_modules\express\lib\router\layer.js:95:5)
        </pre>
    </body>
</html>

细节:

var id = parseInt(req.body.id);

位于F:\DatabaseProject15\routes\common.js:36:32

控制台错误:

TypeError: Cannot read property 'id' of undefined
    at app.post (F:\DatabaseProject15\routes\common.js:36:32)
    at Layer.handle [as handle_request] (F:\DatabaseProject15\node_modules\express\lib\router\layer.js:95:5)
    at next (F:\DatabaseProject15\node_modules\express\lib\router\route.js:137:13)
    at Route.dispatch (F:\DatabaseProject15\node_modules\express\lib\router\route.js:112:3)
    at Layer.handle [as handle_request] (F:\DatabaseProject15\node_modules\express\lib\router\layer.js:95:5)
    at F:\DatabaseProject15\node_modules\express\lib\router\index.js:281:22
    at Function.process_params (F:\DatabaseProject15\node_modules\express\lib\router\index.js:335:12)
    at next (F:\DatabaseProject15\node_modules\express\lib\router\index.js:275:10)
    at expressInit (F:\DatabaseProject15\node_modules\express\lib\middleware\init.js:40:5)
    at Layer.handle [as handle_request] (F:\DatabaseProject15\node_modules\express\lib\router\layer.js:95:5)

代码:

应用程序.js

const pg        = require('pg');
const express   = require('express');
const app       = express();

var common = require('./routes/common')
app.use('/common', common)


app.listen(4600, function () {
    console.log('Server is running.. on Port 8000');
});

路由器/common.js

const pg        = require('pg');
const express   = require('express');
const app       = express();


const config = {
    user: 'postgres',
    database: 'mydb',
    host: '40.83.121.72',
    password: 'abc',
    port: 5432
};

const pool = new pg.Pool(config);


app.post('/', (req, res, next) => {
    pool.connect(function (err, client, done) {
        if (err) {
            console.log("Can not connect to the DB" + err);
        }
        client.query('SELECT * FROM city', function (err, result) {
             done();
             if (err) {
                 console.log(err);
                 res.status(400).send(err);
             }

             res.status(200).send(result.rows);
        })
    })
 });

 app.post('/city', (req,res) => {
    //var id = parseInt(req.params.id);
    var id = parseInt(req.body.id);
    pool.connect(function (err, client, done) {
        if (err) {
            console.log("Can not connect to the DB" + err);
        }
        client.query(`SELECT * FROM city WHERE state_id=${id}`, function (err, result) {
             done();
             if (err) {
                 console.log(err);
                 res.status(400).send(err);
             }
             res.status(200).send(result.rows);
        })
    })  

});

app.post('/app/state/:id', (req,res) => {

    var id = parseInt(req.params.id);

    pool.connect(function (err, client, done) {
        if (err) {
            console.log("Can not connect to the DB" + err);
        }
        client.query(`SELECT * FROM state WHERE id=${id}`, function (err, result) {
             done();
             if (err) {
                 console.log(err);
                 res.status(400).send(err);
             }
             res.status(200).send(result.rows);
        })
    })  

});

module.exports = app

标签: node.js

解决方案


app.js您的路线上方添加

app.use(express.json());

这将让您解析 application/json,如果您需要解析 application/x-www-form-urlencoded,您需要添加

app.use(express.urlencoded({ extended: true }));


推荐阅读