And*_*off 0 javascript http node.js express
我被这个问题困住了,看看是否有人可以提供帮助。我有这个 Node.js 应用程序,当我提交表单并转到注册部分时,我收到此错误:
RangeError: Invalid status code: 0
at ServerResponse.writeHead (_http_server.js:192:11)
at ServerResponse._implicitHeader (_http_server.js:157:8)
at ServerResponse.OutgoingMessage.end (_http_outgoing.js:574:10)
at ServerResponse.send (C:\projects\authentication\node_modules\express\lib\response.js:211:10)
at ServerResponse.json (C:\projects\authentication\node_modules\express\lib\response.js:256:15)
at C:\projects\authentication\app.js:24:7
at Layer.handle_error (C:\projects\authentication\node_modules\express\lib\router\layer.js:71:5)
at trim_prefix (C:\projects\authentication\node_modules\express\lib\router\index.js:315:13)
at C:\projects\authentication\node_modules\express\lib\router\index.js:284:7
at Function.process_params (C:\projects\authentication\node_modules\express\lib\router\index.js:335:12)
Run Code Online (Sandbox Code Playgroud)
这是 app.js
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
// include routes
var routes = require('./routes/router');
app.use('/', routes);
app.use('/register', routes);
// serve static files from /public
app.use(express.static(__dirname + '/template'));
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('File Not Found');
err.status = 404;
next(err);
});
// error handler
// define as the last app.use callback
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.json('error', {
message: err.message,
error: {}
});
});
/////// JSON parser
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(function (req, res) {
res.setHeader('Content-Type', 'text/plain');
res.write('you posted:\n');
res.end(JSON.stringify(req.body, null, 2));
});
// listen on port 3000 setting server
app.listen(3000, function () {
console.log('Express app listening on port 3000');
});
to handle the http request i have a route.js file, wich is like this:
var express = require('express');
var router = express.Router();
var path = require('path');
// GET /
router.get('/', function(req, res, next) {
//res.setHeader('Content-type','text/plain');
return res.sendFile(path.join(__dirname + "/../index.html"));
});
router.post('/register', function(req, res){
//console.log(req.body);
return res.send(req.body.email);
/*
if (req.body.email &&
req.body.username &&
req.body.password &&
req.body.passwordConf) {
var userData = {
email: req.body.email,
username: req.body.username,
password: req.body.password,
passwordConf: req.body.passwordConf
};
//use schema.create to insert data into the db
User.create(userData, function (err, user) {
if (err) {
return next(err);
} else {
return res.redirect('/profile');
}
});
}*/
});
module.exports = router;
Run Code Online (Sandbox Code Playgroud)
当我尝试通过根目录上的 get 请求访问时'/' 它用一个表单打开 html,这个表单转到 '/register' 所以我得到错误,我如何通过 get 获取 html 文件有点奇怪在 root 上,但是当我尝试访问 '/register' 时,我只收到这个错误,已经尝试了很多东西,但我不知道我做错了什么,希望我能得到一些帮助。
RangeError: Invalid status code: 0
at ServerResponse.writeHead (_http_server.js:192:11)
at ServerResponse._implicitHeader (_http_server.js:157:8)
at ServerResponse.OutgoingMessage.end (_http_outgoing.js:574:10)
at ServerResponse.send (C:\projects\authentication\node_modules\express\lib\response.js:211:10)
at ServerResponse.json (C:\projects\authentication\node_modules\express\lib\response.js:256:15)
at C:\projects\authentication\app.js:24:7
at Layer.handle_error (C:\projects\authentication\node_modules\express\lib\router\layer.js:71:5)
at trim_prefix (C:\projects\authentication\node_modules\express\lib\router\index.js:315:13)
at C:\projects\authentication\node_modules\express\lib\router\index.js:284:7
at Function.process_params (C:\projects\authentication\node_modules\express\lib\router\index.js:335:12)
Run Code Online (Sandbox Code Playgroud)
看一下堆栈跟踪:
RangeError: Invalid status code: 0
at ServerResponse.writeHead (_http_server.js:192:11)
...
at C:\projects\authentication\app.js:24:7
Run Code Online (Sandbox Code Playgroud)
好的,所以错误是在第 24 行引起的app.js
,也就是这个:
res.json('error', {
message: err.message,
error: {}
});
Run Code Online (Sandbox Code Playgroud)
Express 试图将其解释'error'
为状态代码(因为较旧版本的 Express 已接受res.json(status, obj)
,已被弃用),并且由于它看起来不像数字,因此在内部将其转换为数字“0”,这是无效状态代码,因此错误。
我猜你的意思是:
res.json({
message: err.message,
error: {}
});
Run Code Online (Sandbox Code Playgroud)
编辑:至于您的其他错误,您需要确保在路由之前body-parser
声明中间件:
var bodyParser = require('body-parser');
/////// JSON parser
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
// include routes
var routes = require('./routes/router');
app.use('/', routes);
app.use('/register', routes);
Run Code Online (Sandbox Code Playgroud)
否则,请求将不会在到达您的路由处理程序之前通过该中间件。
归档时间: |
|
查看次数: |
4184 次 |
最近记录: |