这是我的代码:
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)
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});
希望这可以帮助。