总是返回500错误

时间:2017-03-26 00:20:42

标签: node.js express

var express = require('express');
var router = express.Router();

router.post("/", function(req, res, next) {
console.log('Yes1');
if(!req.body.username || !req.body.password){
  console.log('Yes2');
  return res.status(401).json(JSON.stringify({
      error: 'Username or Password are not set'
  }));

}else{
 console.log('Yes3');
 return res.status(200).json(JSON.stringify({
      data: 'Okay'
  }));
}


//error handler
router.use(function(err, req, res, next) {
    res.status(500).json(JSON.stringify({
        error: err
    }));
});

module.exports = router;

从前端我发送用户名和密码。我期待接收错误200或401.由于某种原因我收到错误500这是默认的错误处理程序。我不确定它是怎么来的。在我的服务器控制台上正在打印Yes1和Yes2,为什么我没有收到错误401?

2 个答案:

答案 0 :(得分:2)

我不知道您是否有更多代码,但您需要使用app.use('/', router)安装路由器。

您还需要安装body-parser middleware才能解析req.body

您的整个应用程序应如下所示:

// router.js

var express = require('express');
var router = express.Router();

router.post("/", function(req, res, next) {
  console.log('Yes1');
  console.log(req.body);
  if(!req.body.username || !req.body.password){
    console.log('Yes2');
    return res.status(401).json(JSON.stringify({
        error: 'Username or Password are not set'
    }));

  }else{
   console.log('Yes3');
   return res.status(200).json(JSON.stringify({
        data: 'Okay'
    }));
  }
});

//error handler
router.use(function(err, req, res, next) {
    res.status(500).json(JSON.stringify({
        error: err
    }));
});

module.exports = router;

// server.js

var express = require('express');
var bodyParser = require('body-parser');
var customRouter = require('./router.js');
var app = express();

app.use(bodyParser.json()); // for parsing application/json
app.use('/', customRouter);

app.listen(3000, function () {
  console.log('Listening on port 3000...');
});

请参阅error handlingrouting文档。

答案 1 :(得分:0)

您的中间件处理程序似乎正在触发,因为401是错误,您将状态重置为500.