在回答我之前的两个问题时: get data from async function 和 add id to checkbox using loop
我现在正在尝试使用nodejs访问选中的复选框,并在我单击结果页面中的按钮时在表中进行表达 但是尝试登录req.body只会给我空字符串或未定义。
我添加了一个文本输入,只是为了查看一切是否按预期进行,是的,当我单击按钮时,我可以将其内容记录在结果页面上,因此问题肯定出在表格和复选框上。
到目前为止,这是我的代码:
服务器:
const express = require('express')
const bodyParser = require('body-parser')
const app = express()
const TorrentSearchApi = require('torrent-search-api')
TorrentSearchApi.enableProvider('Yggtorrent','login', 'password')
//TorrentSearchApi.enableProvider('1337x');
app.use(express.static('public'))
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: true }))
app.set('view engine', 'ejs')
var torrentsG = []; //empty global variable to store the torrents
const search = async query => {
const loweredQuery = query.toLowerCase()
const torrents = await TorrentSearchApi.search(loweredQuery, 'All', 5)
return JSON.stringify(torrents)
}
app.get('/', (_, res) => res.render('index'))
app.post('/', async (req, res) => {
const torrents = await search(req.body.torrent)
torrentsG = JSON.parse(torrents);
//console.log(torrentsG);
res.redirect('/results');
})
app.listen(3000, function () {
console.log('Example app listening on port 3000!')
})
app.get('/results',(_ ,res) => res.render('results', {torrents:torrentsG}))
app.post('/results',function (req,res){
console.log(req.body);
})
客户
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Test</title>
<link href='https://fonts.googleapis.com/css?family=Open+Sans:300' rel='stylesheet' type='text/css'>
<link rel="stylesheet" type="text/css" href="/css/table.css">
</head>
<body align="left">
<div class="container">
<form action="/results" method="post">
<input name="torrent" type="text" class="ghost-input" placeholder="Search a Torrent" required>
<table name="tableau" class="table" align="left">
<thead>
<tr>
<th>Download </th>
<th>Title</th>
<th>time </th>
<th>seeds </th>
<th>size </th>
<th>provider </th>
<th>link </th>
</thead>
<tbody name="TBODY">
<% for (var i = 0; i < torrents.length; i++) { %>
<tr>
<td> <input type="checkbox" name="checkbox" id="checkbox" Class="checkbox"> </td>
<td> <%= torrents[i].title%> </td>
<td> <%= torrents[i].time%> </td>
<td> <%= torrents[i].seeds%> </td>
<td> <%= torrents[i].size%> </td>
<td> <%= torrents[i].provider%> </td>
<td> <%= torrents[i].link%> </td>
</tr>
<% }%>
</tbody>
</table>
<input type="submit" class="ghost-button" value="Download selected torrents to seedbox">
</form>
</div>
</body>
</html>
如您所见,我尝试为复选框的parents元素命名,以使它们至少出现在req.body()中,但没有成功。 另一方面,“ torrent”文本输入已正确记录在req.body中
在此先感谢您的回答,我希望这将是有关此“项目”的最后一个
答案 0 :(得分:2)
您可以将一部分数据隔离在一个 中,例如在 name="data[nameField]" 中。并使用 console.log(req.body.data) 只获取这部分。
车把示例:
<td>
<input type="text" class="form-control" name="data[{{description}}]" value="{{cost}}">
</td>
使用把手 + 助手的示例:
<td>
<input type="text" class="form-control" name="data[{{removeSpace descrizione}}]" value="{{costo}}">
</td>
//Helpers for removeSpace
removeSpace: function(value){
result = value.replace(/\s/g,'')
return result ;
},
多字段示例:
<tr>
<td name={{descrizione}}>{{descrizione}}</td>
<td>
<input type="text" class="form-control" name="description[{{description}}]" value="{{costo}}">
</td>
<td>
<input type="text" class="form-control" name="quantity[{{quantity}}-q]" value="{{quantita}}">
</td>
<td name={{um}}>{{um}}</td>
</tr>