簡體   English   中英

RangeError:無效的狀態代碼:0 節點 js

[英]RangeError: Invalid status code: 0 node js

我被這個問題困住了,看看是否有人可以提供幫助。 我有這個 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)

這是 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;

當我嘗試通過根目錄上的 get 請求訪問時'/' 它用一個表單打開 html,這個表單轉到 '/register' 所以我得到錯誤,我如何通過 get 獲取 html 文件有點奇怪在 root 上,但是當我嘗試訪問 '/register' 時,我只收到這個錯誤,已經嘗試了很多東西,但我不知道我做錯了什么,希望我能得到一些幫助。

HTML文件

</head>
<body>
    <form action="/register" method="post">
        <div>
            <label for="email">email:</label>
            <input type="email" name="email" id="email" />
        </div>
        <div>
            <label for="username">username:</label>
            <input type="text" name="username" id="username" />
        </div>
        <div>
            <label for="password">password:</label>
            <textarea id="password" name="password"></textarea>
        </div>
        <div>
            <label for="passwordConf">password again:</label>
            <textarea name="passwordConf" id="passwordConf"></textarea>
        </div>
        <div class="button">
            <button type="submit">submit</button>
        </div>
    </form>
</body>
</html>

看一下堆棧跟蹤:

RangeError: Invalid status code: 0
    at ServerResponse.writeHead (_http_server.js:192:11)
    ...
    at C:\projects\authentication\app.js:24:7

好的,所以錯誤是在app.js第 24 行引起的,這是一個:

  res.json('error', {
    message: err.message,
    error: {}
  });

Express 試圖將'error'解釋為狀態代碼(因為較舊版本的 Express 接受res.json(status, obj) ,它已被棄用),並且因為它不是一個看起來像數字的東西,所以在內部它被轉換為數字“0”,這是一個無效的狀態代碼,因此是錯誤。

我猜你的意思是:

  res.json({
    message: err.message,
    error: {}
  });

編輯:至於您的其他錯誤,您需要確保您的路由之前聲明了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);

否則,請求將不會在到達您的路由處理程序之前通過該中間件。

這是HTML文件

</head>
<body>
    <form action="/register" method="post">
        <div>
            <label for="email">email:</label>
            <input type="email" name="email" id="email" />
        </div>
        <div>
            <label for="username">username:</label>
            <input type="text" name="username" id="username" />
        </div>
        <div>
            <label for="password">password:</label>
            <textarea id="password" name="password"></textarea>
        </div>
        <div>
            <label for="passwordConf">password again:</label>
            <textarea name="passwordConf" id="passwordConf"></textarea>
        </div>
        <div class="button">
            <button type="submit">submit</button>
        </div>
    </form>
</body>
</html>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM