Javascript GET/500 4.732毫秒--错误:Can';t在发送邮件后设置邮件头
我是Node.js的新手,到目前为止我已经成功安装了Express。现在我有三个js文件,它们处理对本地服务器的CRUD请求 即 然而,当我在postman中执行一个简单的get请求时,我得到了这个错误Javascript GET/500 4.732毫秒--错误:Can';t在发送邮件后设置邮件头,javascript,node.js,express,Javascript,Node.js,Express,我是Node.js的新手,到目前为止我已经成功安装了Express。现在我有三个js文件,它们处理对本地服务器的CRUD请求 即 然而,当我在postman中执行一个简单的get请求时,我得到了这个错误 GET /dishes 500 8.883 ms - - Error: Can't set headers after they are sent. at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:356:11) 我
GET /dishes 500 8.883 ms - -
Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:356:11)
我要给你看我的文件
dishRouter.js
//exporing the functionality
module.exports = function (dishRouter, bp) {
dishRouter.use(bp.json()); //using body parser for parsing json from body
content
//code for url '/'
dishRouter.route('/').all(function (req, res, next) {
res.writeHead(200, {
'Content-Type': 'text/plain'
});
next();
})
//setting up code for get request
.get(function (req, res, next) {
res.end('Will send all the dishes to you!');
})
//setting up code for post request
.post(function (req, res, next) {
res.end('Will add the dish: ' + req.body.name + ' with details: ' +
req.body.description);
})
//setting up code for delete request
.delete(function (req, res, next) {
res.end('Deleting all dishes');
});
//code for url with specific ids
dishRouter.route('/:dishId')
.all(function (req, res, next) {
res.writeHead(200, {
'Content-Type': 'text/plain'
});
next();
})
//setting up code for get request
.get(function (req, res, next) {
res.end('Will send details of the dish: ' + req.params.dishId + ' to you!');
})
//setting up code for put request
.put(function (req, res, next) {
res.write('Updating the dish: ' + req.params.dishId + '\n');
res.end('Will update the dish: ' + req.body.name +
' with details: ' + req.body.description);
})
//setting up code for delete request
.delete(function (req, res, next) {
res.end('Deleting dish: ' + req.params.dishId);
});
};
//exporting the functionality
module.exports = function (promoRouter, bp) {
promoRouter.use(bp.json()); //using body parser for parsing json
from body content
//code for url '/'
promoRouter.route('/').all(function (req, res, next) {
res.writeHead(200, { //writing header
'Content-Type': 'text/plain'
});
next();
})
//setting up code for get request
.get(function (req, res, next) {
res.end('Will send all the promotions to you!');
})
//setting up code for post request
.post(function (req, res, next) {
res.end('Will add the promotion: ' + req.body.name + ' with
details: ' + req.body.description);
})
//setting up code for delete request
.delete(function (req, res, next) {
res.end('Deleting all promotions');
});
//code for url with specific ids
promoRouter.route('/:promoId')
.all(function (req, res, next) {
res.writeHead(200, {
'Content-Type': 'text/plain'
});
next();
})
//setting up code for get request
.get(function (req, res, next) {
res.end('Will send details of the promotion: ' +
req.params.promoId + ' to you!');
})
//setting up code for put request
.put(function (req, res, next) {
res.write('Updating the promotion: ' + req.params.promoId + '\n');
res.end('Will update the promotion: ' + req.body.name +
' with details: ' + req.body.description);
})
//setting up code for delete request
.delete(function (req, res, next) {
res.end('Deleting promotion: ' + req.params.promoId);
});
};
//exporing the functionality
module.exports = function (leaderRouter, bp) {
leaderRouter.use(bp.json()); //using body parser for parsing json from body
content
//code for url '/'
leaderRouter.route('/').all(function (req, res, next) {
res.writeHead(200, {
'Content-Type': 'text/plain'
});
next();
})
//setting up code for get request
.get(function (req, res, next) {
res.end('Will send all the leaders to you!');
})
//setting up code for post request
.post(function (req, res, next) {
res.end('Will add the leader: ' + req.body.name + ' with details: '
+ req.body.description);
})
//setting up code for delete request
.delete(function (req, res, next) {
res.end('Deleting all leaders');
});
//code for url with specific ids
leaderRouter.route('/:leaderId')
.all(function (req, res, next) {
res.writeHead(200, {
'Content-Type': 'text/plain'
});
next();
})
//setting up code for get request
.get(function (req, res, next) {
res.end('Will send details of the leader: ' + req.params.leaderId + ' to you!');
})
//setting up code for put request
.put(function (req, res, next) {
res.write('Updating the leader: ' + req.params.leaderId + '\n');
res.end('Will update the leader: ' + req.body.name +
' with details: ' + req.body.description);
})
//setting up code for delete request
.delete(function (req, res, next) {
res.end('Deleting leader: ' + req.params.leaderId);
});
};
var express = require('express');
var morgan = require('morgan');
var port = 3000;
var hostname = 'localhost';
var app = express();
app.use(morgan('dev'));
var dishRouter = require('./dishRouter');
app.use('/dishes',dishRouter.exports);
var leaderRouter = require('./leaderRouter');
app.use('/leadership', leaderRouter.router);
var promoRouter = require('./promoRouter');
app.use('/promotions', promoRouter.router);
app.use(express.static(__dirname + '/public'));
app.listen(port, hostname, function () {
console.log(`Server running at http://${hostname}:${port}/`);
});
promoRouter.js
//exporing the functionality
module.exports = function (dishRouter, bp) {
dishRouter.use(bp.json()); //using body parser for parsing json from body
content
//code for url '/'
dishRouter.route('/').all(function (req, res, next) {
res.writeHead(200, {
'Content-Type': 'text/plain'
});
next();
})
//setting up code for get request
.get(function (req, res, next) {
res.end('Will send all the dishes to you!');
})
//setting up code for post request
.post(function (req, res, next) {
res.end('Will add the dish: ' + req.body.name + ' with details: ' +
req.body.description);
})
//setting up code for delete request
.delete(function (req, res, next) {
res.end('Deleting all dishes');
});
//code for url with specific ids
dishRouter.route('/:dishId')
.all(function (req, res, next) {
res.writeHead(200, {
'Content-Type': 'text/plain'
});
next();
})
//setting up code for get request
.get(function (req, res, next) {
res.end('Will send details of the dish: ' + req.params.dishId + ' to you!');
})
//setting up code for put request
.put(function (req, res, next) {
res.write('Updating the dish: ' + req.params.dishId + '\n');
res.end('Will update the dish: ' + req.body.name +
' with details: ' + req.body.description);
})
//setting up code for delete request
.delete(function (req, res, next) {
res.end('Deleting dish: ' + req.params.dishId);
});
};
//exporting the functionality
module.exports = function (promoRouter, bp) {
promoRouter.use(bp.json()); //using body parser for parsing json
from body content
//code for url '/'
promoRouter.route('/').all(function (req, res, next) {
res.writeHead(200, { //writing header
'Content-Type': 'text/plain'
});
next();
})
//setting up code for get request
.get(function (req, res, next) {
res.end('Will send all the promotions to you!');
})
//setting up code for post request
.post(function (req, res, next) {
res.end('Will add the promotion: ' + req.body.name + ' with
details: ' + req.body.description);
})
//setting up code for delete request
.delete(function (req, res, next) {
res.end('Deleting all promotions');
});
//code for url with specific ids
promoRouter.route('/:promoId')
.all(function (req, res, next) {
res.writeHead(200, {
'Content-Type': 'text/plain'
});
next();
})
//setting up code for get request
.get(function (req, res, next) {
res.end('Will send details of the promotion: ' +
req.params.promoId + ' to you!');
})
//setting up code for put request
.put(function (req, res, next) {
res.write('Updating the promotion: ' + req.params.promoId + '\n');
res.end('Will update the promotion: ' + req.body.name +
' with details: ' + req.body.description);
})
//setting up code for delete request
.delete(function (req, res, next) {
res.end('Deleting promotion: ' + req.params.promoId);
});
};
//exporing the functionality
module.exports = function (leaderRouter, bp) {
leaderRouter.use(bp.json()); //using body parser for parsing json from body
content
//code for url '/'
leaderRouter.route('/').all(function (req, res, next) {
res.writeHead(200, {
'Content-Type': 'text/plain'
});
next();
})
//setting up code for get request
.get(function (req, res, next) {
res.end('Will send all the leaders to you!');
})
//setting up code for post request
.post(function (req, res, next) {
res.end('Will add the leader: ' + req.body.name + ' with details: '
+ req.body.description);
})
//setting up code for delete request
.delete(function (req, res, next) {
res.end('Deleting all leaders');
});
//code for url with specific ids
leaderRouter.route('/:leaderId')
.all(function (req, res, next) {
res.writeHead(200, {
'Content-Type': 'text/plain'
});
next();
})
//setting up code for get request
.get(function (req, res, next) {
res.end('Will send details of the leader: ' + req.params.leaderId + ' to you!');
})
//setting up code for put request
.put(function (req, res, next) {
res.write('Updating the leader: ' + req.params.leaderId + '\n');
res.end('Will update the leader: ' + req.body.name +
' with details: ' + req.body.description);
})
//setting up code for delete request
.delete(function (req, res, next) {
res.end('Deleting leader: ' + req.params.leaderId);
});
};
var express = require('express');
var morgan = require('morgan');
var port = 3000;
var hostname = 'localhost';
var app = express();
app.use(morgan('dev'));
var dishRouter = require('./dishRouter');
app.use('/dishes',dishRouter.exports);
var leaderRouter = require('./leaderRouter');
app.use('/leadership', leaderRouter.router);
var promoRouter = require('./promoRouter');
app.use('/promotions', promoRouter.router);
app.use(express.static(__dirname + '/public'));
app.listen(port, hostname, function () {
console.log(`Server running at http://${hostname}:${port}/`);
});
leaderRouter.js
//exporing the functionality
module.exports = function (dishRouter, bp) {
dishRouter.use(bp.json()); //using body parser for parsing json from body
content
//code for url '/'
dishRouter.route('/').all(function (req, res, next) {
res.writeHead(200, {
'Content-Type': 'text/plain'
});
next();
})
//setting up code for get request
.get(function (req, res, next) {
res.end('Will send all the dishes to you!');
})
//setting up code for post request
.post(function (req, res, next) {
res.end('Will add the dish: ' + req.body.name + ' with details: ' +
req.body.description);
})
//setting up code for delete request
.delete(function (req, res, next) {
res.end('Deleting all dishes');
});
//code for url with specific ids
dishRouter.route('/:dishId')
.all(function (req, res, next) {
res.writeHead(200, {
'Content-Type': 'text/plain'
});
next();
})
//setting up code for get request
.get(function (req, res, next) {
res.end('Will send details of the dish: ' + req.params.dishId + ' to you!');
})
//setting up code for put request
.put(function (req, res, next) {
res.write('Updating the dish: ' + req.params.dishId + '\n');
res.end('Will update the dish: ' + req.body.name +
' with details: ' + req.body.description);
})
//setting up code for delete request
.delete(function (req, res, next) {
res.end('Deleting dish: ' + req.params.dishId);
});
};
//exporting the functionality
module.exports = function (promoRouter, bp) {
promoRouter.use(bp.json()); //using body parser for parsing json
from body content
//code for url '/'
promoRouter.route('/').all(function (req, res, next) {
res.writeHead(200, { //writing header
'Content-Type': 'text/plain'
});
next();
})
//setting up code for get request
.get(function (req, res, next) {
res.end('Will send all the promotions to you!');
})
//setting up code for post request
.post(function (req, res, next) {
res.end('Will add the promotion: ' + req.body.name + ' with
details: ' + req.body.description);
})
//setting up code for delete request
.delete(function (req, res, next) {
res.end('Deleting all promotions');
});
//code for url with specific ids
promoRouter.route('/:promoId')
.all(function (req, res, next) {
res.writeHead(200, {
'Content-Type': 'text/plain'
});
next();
})
//setting up code for get request
.get(function (req, res, next) {
res.end('Will send details of the promotion: ' +
req.params.promoId + ' to you!');
})
//setting up code for put request
.put(function (req, res, next) {
res.write('Updating the promotion: ' + req.params.promoId + '\n');
res.end('Will update the promotion: ' + req.body.name +
' with details: ' + req.body.description);
})
//setting up code for delete request
.delete(function (req, res, next) {
res.end('Deleting promotion: ' + req.params.promoId);
});
};
//exporing the functionality
module.exports = function (leaderRouter, bp) {
leaderRouter.use(bp.json()); //using body parser for parsing json from body
content
//code for url '/'
leaderRouter.route('/').all(function (req, res, next) {
res.writeHead(200, {
'Content-Type': 'text/plain'
});
next();
})
//setting up code for get request
.get(function (req, res, next) {
res.end('Will send all the leaders to you!');
})
//setting up code for post request
.post(function (req, res, next) {
res.end('Will add the leader: ' + req.body.name + ' with details: '
+ req.body.description);
})
//setting up code for delete request
.delete(function (req, res, next) {
res.end('Deleting all leaders');
});
//code for url with specific ids
leaderRouter.route('/:leaderId')
.all(function (req, res, next) {
res.writeHead(200, {
'Content-Type': 'text/plain'
});
next();
})
//setting up code for get request
.get(function (req, res, next) {
res.end('Will send details of the leader: ' + req.params.leaderId + ' to you!');
})
//setting up code for put request
.put(function (req, res, next) {
res.write('Updating the leader: ' + req.params.leaderId + '\n');
res.end('Will update the leader: ' + req.body.name +
' with details: ' + req.body.description);
})
//setting up code for delete request
.delete(function (req, res, next) {
res.end('Deleting leader: ' + req.params.leaderId);
});
};
var express = require('express');
var morgan = require('morgan');
var port = 3000;
var hostname = 'localhost';
var app = express();
app.use(morgan('dev'));
var dishRouter = require('./dishRouter');
app.use('/dishes',dishRouter.exports);
var leaderRouter = require('./leaderRouter');
app.use('/leadership', leaderRouter.router);
var promoRouter = require('./promoRouter');
app.use('/promotions', promoRouter.router);
app.use(express.static(__dirname + '/public'));
app.listen(port, hostname, function () {
console.log(`Server running at http://${hostname}:${port}/`);
});
server.js
//exporing the functionality
module.exports = function (dishRouter, bp) {
dishRouter.use(bp.json()); //using body parser for parsing json from body
content
//code for url '/'
dishRouter.route('/').all(function (req, res, next) {
res.writeHead(200, {
'Content-Type': 'text/plain'
});
next();
})
//setting up code for get request
.get(function (req, res, next) {
res.end('Will send all the dishes to you!');
})
//setting up code for post request
.post(function (req, res, next) {
res.end('Will add the dish: ' + req.body.name + ' with details: ' +
req.body.description);
})
//setting up code for delete request
.delete(function (req, res, next) {
res.end('Deleting all dishes');
});
//code for url with specific ids
dishRouter.route('/:dishId')
.all(function (req, res, next) {
res.writeHead(200, {
'Content-Type': 'text/plain'
});
next();
})
//setting up code for get request
.get(function (req, res, next) {
res.end('Will send details of the dish: ' + req.params.dishId + ' to you!');
})
//setting up code for put request
.put(function (req, res, next) {
res.write('Updating the dish: ' + req.params.dishId + '\n');
res.end('Will update the dish: ' + req.body.name +
' with details: ' + req.body.description);
})
//setting up code for delete request
.delete(function (req, res, next) {
res.end('Deleting dish: ' + req.params.dishId);
});
};
//exporting the functionality
module.exports = function (promoRouter, bp) {
promoRouter.use(bp.json()); //using body parser for parsing json
from body content
//code for url '/'
promoRouter.route('/').all(function (req, res, next) {
res.writeHead(200, { //writing header
'Content-Type': 'text/plain'
});
next();
})
//setting up code for get request
.get(function (req, res, next) {
res.end('Will send all the promotions to you!');
})
//setting up code for post request
.post(function (req, res, next) {
res.end('Will add the promotion: ' + req.body.name + ' with
details: ' + req.body.description);
})
//setting up code for delete request
.delete(function (req, res, next) {
res.end('Deleting all promotions');
});
//code for url with specific ids
promoRouter.route('/:promoId')
.all(function (req, res, next) {
res.writeHead(200, {
'Content-Type': 'text/plain'
});
next();
})
//setting up code for get request
.get(function (req, res, next) {
res.end('Will send details of the promotion: ' +
req.params.promoId + ' to you!');
})
//setting up code for put request
.put(function (req, res, next) {
res.write('Updating the promotion: ' + req.params.promoId + '\n');
res.end('Will update the promotion: ' + req.body.name +
' with details: ' + req.body.description);
})
//setting up code for delete request
.delete(function (req, res, next) {
res.end('Deleting promotion: ' + req.params.promoId);
});
};
//exporing the functionality
module.exports = function (leaderRouter, bp) {
leaderRouter.use(bp.json()); //using body parser for parsing json from body
content
//code for url '/'
leaderRouter.route('/').all(function (req, res, next) {
res.writeHead(200, {
'Content-Type': 'text/plain'
});
next();
})
//setting up code for get request
.get(function (req, res, next) {
res.end('Will send all the leaders to you!');
})
//setting up code for post request
.post(function (req, res, next) {
res.end('Will add the leader: ' + req.body.name + ' with details: '
+ req.body.description);
})
//setting up code for delete request
.delete(function (req, res, next) {
res.end('Deleting all leaders');
});
//code for url with specific ids
leaderRouter.route('/:leaderId')
.all(function (req, res, next) {
res.writeHead(200, {
'Content-Type': 'text/plain'
});
next();
})
//setting up code for get request
.get(function (req, res, next) {
res.end('Will send details of the leader: ' + req.params.leaderId + ' to you!');
})
//setting up code for put request
.put(function (req, res, next) {
res.write('Updating the leader: ' + req.params.leaderId + '\n');
res.end('Will update the leader: ' + req.body.name +
' with details: ' + req.body.description);
})
//setting up code for delete request
.delete(function (req, res, next) {
res.end('Deleting leader: ' + req.params.leaderId);
});
};
var express = require('express');
var morgan = require('morgan');
var port = 3000;
var hostname = 'localhost';
var app = express();
app.use(morgan('dev'));
var dishRouter = require('./dishRouter');
app.use('/dishes',dishRouter.exports);
var leaderRouter = require('./leaderRouter');
app.use('/leadership', leaderRouter.router);
var promoRouter = require('./promoRouter');
app.use('/promotions', promoRouter.router);
app.use(express.static(__dirname + '/public'));
app.listen(port, hostname, function () {
console.log(`Server running at http://${hostname}:${port}/`);
});
上述4个文件位于routes文件夹中。最后,我有了app.js
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var routes = require('./routes/index');
var users = require('./routes/users');
var dishRouter = require('./routes/dishRouter');
var promoRouter = require('./routes/promoRouter');
var leaderRouter = require('./routes/leaderRouter');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', routes);
app.use('/users', users);
app.use('/dishes',dishRouter);
app.use('/promotions',promoRouter);
app.use('/leadership',leaderRouter);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// error handlers
// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: err
});
});
}
// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {}
});
});
module.exports = app;
你知道我为什么会犯这个错误吗?请给我一些建议
谢谢
Theo.我猜您的错误处理程序被触发,它使用
res.render()
,将触发“发送后无法设置头”错误,因为您正在路由器中使用res.writeHead()
。暂时尝试删除res.writeHead
行,然后重试。也许错误的位置会暴露出来。@robertklep。谢谢你的回复。我从dishRouter中删除了writeHead()函数,但是当我使用localhost:3000/dishs.Hmm时,我得到了相同的错误。这是您正在使用的实际代码吗?因为所有的路由器文件都会导出一个函数,但这些函数似乎从未被调用。我在一个名为server.js的文件中调用它们。我更新了我的问题。你有两个文件,server.js
和app.js
基本上都在做同样的事情?还有,为什么dishRouter.exports
但是leaderRouter.router
和promoRouter.router
(.exports
vs.router
)?