Я заполняю html-таблицу данными из базы данных (электронные письма пользователей и их роли в моей системе (админы и пользователи)).
router.get('/adminOffice', function(req, res){
database.connection.query("select email, role from users", function(err, rows, fields){
if(err) console.log(err);
res.render('adminOffice', {rows: rows});
});
});
С помощью ejs это выглядит следующим образом (adminOffice.ejs
):
<form method="post" action="saveRoles">
<table name="table" id="table"><tr>
<th>Email</th><th>Role</th>
</tr>
<% for (var i = 1; i < rows.length; i++) { %>
<tr class="tableclass">
<td><%= rows[i].email %></td>
<td> <select class="select">
<% if (rows[i].role == 'admin') { %>
<option selected value="admin">admin</option>
<option value='user'>user</option>
<% } else { %>
<option selected value="user">user</option>
<option value="admin">admin</option>
<% } %>
</select>
</tr>
<% } %>
</table>
<input type="submit" name="submit" value="submit" />
</form>
Если я хочу изменить какую-то роль пользователя, мне нужно извлечь данные из таблицы в формат JSON, например, в почтовом запросе, как я могу это сделать?
Я пытался использовать request
и cheerio
router.post('/saveRoles', function(req, res, next){
request.get('http://127.0.0.1:3000/adminOffice', function(err,
response, body, callback){
var $ = cheerio.load(body);
var result = $(".tableclass").map((i, element) => ({
email: $(element).find('td:nth-of-type(1)').text(),
role: $(element).find('.select option:selected').text()
})).get();
console.log(result[0].role);
database.connection.query("select email, role from users", function(err, rows, fields){
if(err) console.log(err);
for(var i = 1; i < rows.length; i++){
if(rows[i].role != result[i-1].role){
database.connection.query("update users set role = ? where email = ?", rows[i].role, rows[i].email, function(err, res){
if(err) console.log(err);
console.log("success");
});
} else {
console.log("not success");
}
}
});
});
res.redirect('/adminOffice');
});
но они работают с новой /adminOffice
страницей и с начальными значениями там.
Например, в моей таблице есть 2 пользователя: {email: user1@user, role: user}, {email: user2@user, role: user}
, я меняю роль 1-го пользователя на admin
и нажимаю sumbit
, request
загружает новую adminOffice
страницу, где снова 1-й пользователь имеет роль user
, поэтому post
регистрирует двойное not success
, а БД никогда не менялась.
Может быть, мне следует использовать AJAX или что-то еще (новое для NodeJS и JS)