node.js - 如何使用 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 'id' of undefined
<br> at app.post (F:\DatabaseProject15\routes\common.js:36:32)
<br> at Layer.handle [as handle_request] (F:\DatabaseProject15\node_modules\express\lib\router\layer.js:95:5)
<br> at next (F:\DatabaseProject15\node_modules\express\lib\router\route.js:137:13)
<br> at Route.dispatch (F:\DatabaseProject15\node_modules\express\lib\router\route.js:112:3)
<br> at Layer.handle [as handle_request] (F:\DatabaseProject15\node_modules\express\lib\router\layer.js:95:5)
<br> at F:\DatabaseProject15\node_modules\express\lib\router\index.js:281:22
<br> at Function.process_params (F:\DatabaseProject15\node_modules\express\lib\router\index.js:335:12)
<br> at next (F:\DatabaseProject15\node_modules\express\lib\router\index.js:275:10)
<br> at expressInit (F:\DatabaseProject15\node_modules\express\lib\middleware\init.js:40:5)
<br> 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
解决方案
在app.js
您的路线上方添加
app.use(express.json());
这将让您解析 application/json,如果您需要解析 application/x-www-form-urlencoded,您需要添加
app.use(express.urlencoded({ extended: true }));
推荐阅读
- linux - 在 Gentoo 上安装 ElasticSearch
- java - 传递 SelectOneMenu 值以在 JSF/Primefaces 中添加功能
- java - 由应用程序 [webservices] 中的 servlet [REST 服务] 创建的未捕获的 init() 异常:java.lang.IllegalArgumentException
- r - 从R中的嵌套ggplot中删除索引号
- android - 将垂直线添加到 ProgressBar
- postgresql - 在 AWS 上创建具有只读权限的 PostgreSQL 用户
- c - 为什么通过引用传递在 c 中不起作用?
- ios - 子类 UINavigationBar SWIFT
- git - 如何回到之前的提交?
- powershell - 如何获取目录搜索的输出并修改指定文件