我使用node/express和EJS,沿着postgres数据库。
我的home.ejs文件中有3个输入,名为:标题平台流派
这些都包含在一个表单中,所以我可以创建一个帖子请求。
看起来像这样:
<h2>Add a Game:</h2>
<form method="POST" action="/">
<label for="title">Title:</label>
<input type="text" id="title" name="title" required><br><br>
<label for="platform">Platform:</label>
<input type="text" id="platform" name="platform" required><br><br>
<label for="genre">Genre:</label>
<input type="text" id="genre" name="genre" required><br><br>
<button type="submit">Add Game</button>
</div>
输入到这些输入中的值将作为post请求发送到我的服务器文件(app.js)
app.post('/', async (req, res) => {
// get the user's input from the form
const title = req.body.title;
const platform = req.body.platform;
const genre = req.body.genre;
然后将这些值赋给上述代码中的变量。
在这个post路由中,我试图将这些值传递到我的api.js文件中,该文件基本上是API的case语句,具有以下参数:
app,pool,user_id;
文件通过下面的行导入到我的app.js中:
const apiList = require('./routes/api_list');
使用下面的代码行,我将这些参数传递到API case语句中:
const result = await apiList(app, pool, 1, 'addNewGame', {title, genre, platform });
我所针对的特定API应该接受这些值并将它们插入到我的postgres数据库中。
我的部分API看起来像这样:
case 'addNewGame':
return new Promise(async (resolve, reject) => {
try {
const {title, genre, platform } = req.body;
const result = await pool.query('INSERT INTO schemaName,tableName(user_id, title, genre,
platform) VALUES ($1, $2, $3, $4)', [userId, title, genre, platform]);
if (result.rowCount === 0) {
reject('exists'); // Reject the promise with 'exists' if the game already exists
} else {
resolve('added'); // Resolve the promise with 'added' if the game is successfully added
}
我的控制台记录了一个错误:
TypeError:无法解构“req.body”的属性“title”,因为它未定义。at fileLocation\routes\appList.js:75:14 at new Promise()
我尝试从请求数据对象中检索值,并确保我也将此对象作为app.js post route中的参数传递,但出现了相同的控制台错误,说requestData未定义。
注意事项:我已经让CRUD的“读”部分工作了,并且已经成功地将数据从我的DB发送到前端,因此在我的DB连接中没有错误。
我在app.js文件中声明了以下内容:
const bodyParser = require("body-parser");
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json());
我被'Ivan'要求展示apiList case语句方法,见下文;
module.exports = function(app, pool, userId, functionName, req) {
switch (functionName) {
case: 'addGame':
任何帮助将不胜感激!
3条答案
按热度按时间ajsxfq5m1#
根据提供的信息,您的方法没有
req
输入参数。这就是错误所说的
参考错误:req未在folder_directory\routes\API_list.js:74:41中定义
为了解决这个问题,你需要修改你的方法签名:
在我看来,你调用方法是正确的,因为你有5个输入参数:
lg40wkob2#
我认为你还没有使用body parser包来解析来自API的post请求中的body在js文件的顶部添加下面的代码,以便它可以帮助你从post请求中阅读数据
utugiqy63#
谢谢Ivan,你的回答让我找到了解决方案,我还需要在我的app.js帖子路由中更改以下代码:
对此:
这解决了问题。