Javascript 为什么Express.js重定向会在Node.js MongoDB应用程序中抛出错误[ERR_HTTP_HEADERS_SENT]?
我目前正在使用Node.js、Express.js和MongoDB创建一个基本的RESTAPI。我试图在执行查询后重定向到另一个页面,但我的控制台在标题中抛出了错误。这是我的密码:Javascript 为什么Express.js重定向会在Node.js MongoDB应用程序中抛出错误[ERR_HTTP_HEADERS_SENT]?,javascript,node.js,mongodb,express,Javascript,Node.js,Mongodb,Express,我目前正在使用Node.js、Express.js和MongoDB创建一个基本的RESTAPI。我试图在执行查询后重定向到另一个页面,但我的控制台在标题中抛出了错误。这是我的密码: app.post('/', (req, res) => { MongoClient.connect(process.env.DB_CONNECTION, { useUnifiedTopology: true, useNewUrlParser: true }, function (err, db) {
app.post('/', (req, res) => {
MongoClient.connect(process.env.DB_CONNECTION, { useUnifiedTopology: true, useNewUrlParser: true }, function (err, db) {
if (err) throw err;
const dbo = db.db("mydb");
const messageTable = dbo.collection("messages");
let myobj = { message: req.body.message };
console.log(myobj)
messageTable.insertOne(myobj, function (err, res) {
if (err) throw err;
console.log("1 document inserted");
db.close();
});
});
//Get message
MongoClient.connect(process.env.DB_CONNECTION, { useUnifiedTopology: true, useNewUrlParser: true }, function (err, db) {
const messageTable = db.db('mydb').collection('messages');
var myPromise = () => {
return new Promise((resolve, reject) => {
messageTable.aggregate(
[{ $sample: { size: 1 } }]
).toArray((err, data) => {
err
? reject(err)
: resolve(data[0]);
});
});
}
//Step 2: async promise handler
var callMyPromise = async () => {
var result = await (myPromise());
//anything here is executed after result is resolved
return result;
};
//Step 3: make the call
callMyPromise().then(function (result) {
db.close();
res.json(result);
res.redirect('/');
});
});
}); //end mongo client
代码仅在我包含res.redirect('/')时抛出错误代码>
此外,我不知道这是否与此有关,但这是我的get请求:
app.get('/', (req, res) => {
fs.readFile('./views/home.html', function (err, data) {
res.writeHead(200, { 'Content-Type': 'text/html' });
res.write(data);
res.end();
});
这回答了你的问题吗@但事实并非如此。即使我检查了状态码,我也会得到同样的错误。我编辑了我的初始响应以包含我的get请求,因为这可能与此有关。您正在步骤3中发送响应:res.json(result)
。然后,您尝试再次发送另一个响应:res.redirect('/')
。这里的预期行为是什么?@shkaper我想从数据库中获取文档,然后重定向到包含表单的主页。然后我希望能够使用显示结果数据和表单,并允许用户提交更多数据。我如何做这两个响应?@shkaper我如何确保res.json(result)在重定向之前运行?