我正在尝试为类创建一个小型数据库项目。我已经为服务器设置了一个使用express.js的nodejs应用程序。我正在尝试将数据库中的数据显示为列表元素中的文本,到目前为止,它将一次只用于一个SELECT语句,但另一个语句,我不知道为什么。
我得到了以下错误: Error ERR_HTTP_HEADERS_SENT:无法在将头发送到客户端后设置它们
这是图像:只注意library.books表显示的数据,如果我注释该查询,它将只显示来自library.audiobook表的数据。
下面是我试图用两个SELECT查询显示来自两个表的数据的代码
app.get('/index.hbs', (req, res) => {
let query = "SELECT * FROM library.book";
let query_audiobook = "SELECT * FROM library.audiobook";
let items = []
let auds = []
con.query(query, (err, result) => {
if (err) throw err;
items = result
console.log(items)
res.render('index', {
items: items
})
})
con.query(query_audiobook, (err, result) => {
if (err) throw err;
auds = result
console.log(auds)
res.render('index', {
auds: auds
})
})
});如果我将其分为两个app.get()并注释掉一个,那么数据将填充到它的正确部分中,但是我希望显示来自两个表的数据。
如果需要的话,这里是我用来显示数据的index.hbs html,但我假设问题来自于我试图调用上面的查询的方式。
<div class="container">
<h1>Online Library</h1>
<h2>Librarian Portal</h2>
<a href="customer.hbs">
<button type="button" id="submit">Switch to Customer View</button>
</a>
<br>
<br>
<h3>Add a Book to the Library:</h3>
<form method="POST" action="/" >
<label for="ibsn">IBSN:</label>
<input type="text" name="ibsn" id="task" required>
<label for="title">Title:</label>
<input type="text" name="name" id="task" required>
<label for="status">Status:</label>
<input type="text" name="status" id="task" required>
<label for="author">Author:</label>
<input type="text" name="author" id="task" required>
<label for="genre">Genre:</label>
<input type="text" name="genre" id="task" required>
<button type="submit" id="submit">Add Book</button>
</form>
<br>
<h3>Books in the Library:</h3>
<div id="tasks_container">
<ul>
{{#each items}}
<li>IBSN: {{ibsn}} | Title: {{name}} | Status: {{status}} | Author: {{author}} | Genre: {{genre}} </li>
{{/each}}
</ul>
</div>
</div>
<div class="audio_view">
<h3>Add an AudioBook to the Library:</h3>
{{!-- <form method="POST" action="/">
<ul>
{{#each items}}
</ul>
</form> --}}
<form method="POST" action="/audiobook" >
<label for="id">ID:</label>
<input type="text" name="id" id="task" required>
<label for="name">Title:</label>
<input type="text" name="name" id="task" required>
<label for="status">Status:</label>
<input type="text" name="status" id="task" required>
<label for="length">Length:</label>
<input type="text" name="length" id="task" required>
<label for="author">Author:</label>
<input type="text" name="author" id="task" required>
<label for="narrator">Narrator:</label>
<input type="text" name="narrator" id="task" required>
<label for="genre">Genre:</label>
<input type="text" name="genre" id="task" required>
<button type="submit" id="submit">Add Audiobook</button>
</form>
<h3>Audiobooks in the Library:</h3>
<div id="tasks_container">
<ul>
{{#each auds}}
<li>ID: {{id}} | Title: {{name}} | Status: {{status}} | Length: {{length}} | Author: {{author}} | Narrator: {{narrator}} | Genre: {{genre}} </li>
{{/each}}
</ul>
</div>
</div>发布于 2022-05-12 20:29:56
结果,我只需要在mysql.createConnection({multipleStatements:true})中启用多个查询,然后将两个查询放在一个get调用中,似乎就可以解决这个问题。
app.get('/index.hbs', (req, res) => {
var queries = "SELECT * FROM library.book;SELECT * FROM library.audiobook";
let items = []
let auds = []
con.query(queries, [2,1], function(err, result, fields){
if (err) throw err;
items = result[0]
auds = result[1]
console.log(items)
console.log(auds)
res.render('index', {
items: items,
auds:auds
})
})
});https://stackoverflow.com/questions/72220682
复制相似问题