'缺少路线' node.js中的错误处理表达app(失败)

时间:2017-10-26 18:03:29

标签: javascript node.js express

我只是尝试在我的app.js或路由器文件中工作,以处理可能丢失的路由器错误。 (类似的stackoverflow解决方案对我没用)

我的app.js或路由器文件因此(原样工作正常;但我正在尝试正确处理丢失的路由器错误)

'use strict'
var path = require('path');
var film = require('./healthymeals.js');
var express = require('express');
var router = express.Router();
var app = express();

module.exports = function(app) {

  app.get('/allMeals', film.getAllMeals);

  app.get('/meals/:id', film.getMealInfo);

  app.get('/meals/:id/options',meal.getHealthyMealoptions);

  app.get('*', function(req, res) {
    res.send("Healthy meals");
  });

我已经安装了npm' s / express错误处理包' http-status-codes'

尝试它的实施:

var HttpStatus = require('http-status-codes');

response
    .status(HttpStatus.OK)
    .send('ok');

response
    .status(HttpStatus.INTERNAL_SERVER_ERROR)
    .send({
        error: HttpStatus.getStatusText(HttpStatus.INTERNAL_SERVER_ERROR)
    });

当上述情况发生时;我在&{39; response'' ReferenceError: response is not defined '字。 安装相关的npm包时没有错误。

function getAllApps(request, response) {
    appService.getApps(request.query.$expand).then(function (apps) {
        response.status(200).send(apps);
        })
    .catch(function (err) {
      console.error('Error occurred in Apps Api: ' + err);
      response.status(500).send("" + err);
    });
}

然后尝试了一些我在stackover上找到的建议, ie。

Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves.

这是无效的,似乎只是被忽略了。任何指针赞赏(第一次使用此堆栈)。欢呼声

更新,以及来自Jonas w的答案 - 我第一次得到的时间错误如下:

TypeError: Cannot read property 'status' of undefined

然后在增加时间之后,我得到以下错误:

  describe('error handling', function() {
        it('handles missing routes', function(done) {
            request
                .get('/meals/brokenroute')
                .expect(404)
                .expect(function(res) {
                    ok('message' in res.body, '"message" key missing');
                })
                .end(done);
        });

对于更多上下文,这里的测试是通过我的尝试:

While choice <> "1" AndAlso choice <> "2" AndAlso choice <> "3" AndAlso choice <> "4"

1 个答案:

答案 0 :(得分:2)

我发现的最佳解决方案(仅使用普通快递):

app.get('/allMeals', film.getAllMeals, END);

app.get('/meals/:id', film.getMealInfo, END);

 app.get('/meals/:id/options',meal.getHealthyMealoptions,END);

function END(req,res){
  res.end();
  //note that this wont call next...
}

//all errors are handled below

app.get('*', function(req, res) {
   res.status(404).end();
 });