一尘不染

_http_server.js:192抛出新的RangeError(`无效状态码:$ {statusCode}`);

redis

这是我的代码:

var express = require('express');
var http = require('http');
var redis = require('redis');
var url = require('url');
var client = redis.createClient().setMaxListeners(0);

var app = express();
app.set('port', 3000);

app.get('/*', function(req, res) {
  var key = url.parse(req.url).pathname;
  client.on('connect', function() {
    console.log('connected to redis!');
  });
  client.get(key, function(err, reply) {
    if( reply == null) {
      client.set(key, 1);
      client.expire(key, 300);
      res.send('1');
    }
    else {
      client.incr(key, function(err, reply) {
        console.log('increment value: ' + reply);
        res.sendStatus(reply);
      });
    }
  });

});


http.createServer(app).listen(app.get('port'), function() {
  console.log('listening');
});

这是我运行文件($ node
test.js)时的输出:我在ubuntu机器上尝试了此操作,它运行良好。这就是我在Mac上获得的。有人可以解释一下为什么会这样。任何帮助,将不胜感激。

倾听
增量值:2
_http_server.js:192
    抛出新的RangeError(`无效状态代码:$ {statusCode}`);
    ^

RangeError:无效的状态码:2
    在ServerResponse.writeHead(_http_server.js:192:11)
    在ServerResponse._implicitHeader(_http_server.js:157:8)
    在ServerResponse.OutgoingMessage.end(_http_outgoing.js:559:10)
    在ServerResponse.send(/Users/sharath/webapps/docker/node_modules/express/lib/response.js:209:10)
    在ServerResponse.sendStatus(/Users/sharath/webapps/docker/node_modules/express/lib/response.js:346:15)
    在Command.callback(/Users/sharath/webapps/docker/test.js:24:13)
    在normal_reply(/Users/sharath/webapps/docker/node_modules/redis/index.js:714:21)
    在RedisClient.return_reply(/Users/sharath/webapps/docker/node_modules/redis/index.js:816:9)
    在JavascriptRedisParser.returnReply(/Users/sharath/webapps/docker/node_modules/redis/index.js:188:18)
    在JavascriptRedisParser.execute(/Users/sharath/webapps/docker/node_modules/redis-parser/lib/parser.js:415:12)

阅读 358

收藏
2020-06-20

共1个答案

一尘不染

Http响应状态应为整数。它不能是字符串,对象,数组等,并且应从100开始。

从您的代码中,我看到您尝试做

res.sendStatus(reply);

检查回复变量。从redis incr响应中,我认为它是字符串“ OK”。

哪一个不好。所以要修复它,只需使用

res.sendStatus(reply ? 200 : 500);

还要检查一下。

http://expressjs.com/en/4x/api.html#res.sendStatus

还有这个

https://en.wikipedia.org/wiki/List_of_HTTP_status_codes

编辑

如果您需要将一些JSON或数据发送到前端,只需执行以下操作

res.json({thisIsMyNumber: reply});

要么

res.send({thisIsMyNumber: reply});

希望这可以帮助。

2020-06-20