2017-08-01 36 views
0

我被困在這個問題上,看看有沒有人可以幫忙。 我有這個Node.js應用程式,當我提交表單,然後轉到註冊部分我得到這個錯誤:RangeError:無效的狀態代碼:0節點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; 

當我嘗試存取權限通過獲得請求的根'/'它打開一個窗體的HTML,這種形式去'/註冊',所以然後我得到的錯誤,這有點奇怪我怎麼得到的HTML文件很好通過得到根,但是當我嘗試訪問'/註冊'我只得到這個錯誤,已經嘗試了很多東西,我不能做什麼我做錯了,希望我能得到一些幫助。 謝謝。

回答

3

看看堆棧跟蹤:

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

好了,這樣的錯誤是對24 app.js線造成的,這是這一個:

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

快遞試圖解釋'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); 

否則,請求不會在它們碰到路由處理程序之前通過該中間件。

+0

哇,這是一段代碼來處理錯誤,其實你是對的,現在我得到正確的錯誤消息,這是有點諷刺,這個問題已經解決,但第一個錯誤仍然存​​在... 現在,當我訪問'/ register'{「message」:「無法讀取未定義的屬性'email',」error「時出現此消息:{ }} ... ... 它看起來像我沒有從發佈請求或這樣的somethink獲得信息。 –

+0

@AndreyViktorKandauroff看到我的編輯。 – robertklep

+0

男人,這是好事,你在幫助,但它仍然不完美,如果你能再次給我一個理想,因爲現在我得到的消息沒有錯誤,但消息是不正確的,我只得到電郵信息。像這樣: {「email」:「[email protected]」} –

0

這是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> 
+0

請編輯您的問題,並將其添加到它:) – robertklep