Node.js 类似Slack教程的聊天应用程序

Node.js 类似Slack教程的聊天应用程序,node.js,reactjs,express,pusher,chatkit,Node.js,Reactjs,Express,Pusher,Chatkit,我将在这里学习本教程: 我被困在14分钟左右,在终端中收到以下错误消息: (node:6248) UnhandledPromiseRejectionWarning: RangeError [ERR_HTTP_INVALID_STATUS_CODE]: Invalid status code: undefined [0] at ServerResponse.writeHead (_http_server.js:237:11) [0] at ServerResponse._impli

我将在这里学习本教程:

我被困在14分钟左右,在终端中收到以下错误消息:

(node:6248) UnhandledPromiseRejectionWarning: RangeError [ERR_HTTP_INVALID_STATUS_CODE]: Invalid status code: undefined
[0]     at ServerResponse.writeHead (_http_server.js:237:11)
[0]     at ServerResponse._implicitHeader (_http_server.js:228:8)
[0]     at write_ (_http_outgoing.js:616:9)
[0]     at ServerResponse.end (_http_outgoing.js:733:5)
[0]     at ServerResponse.send (D:\htdocs\mern\react-slack-clone\node_modules\express\lib\response.js:221:10)
[0]     at ServerResponse.sendStatus (D:\htdocs\mern\react-slack-clone\node_modules\express\lib\response.js:359:15)
[0]     at D:\htdocs\mern\react-slack-clone\server.js:31:13
[0]     at processTicksAndRejections (internal/process/task_queues.js:93:5)
[0] (node:6248) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise
which was not handled with .catch(). (rejection id: 1)
[0] (node:6248) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero
exit code
Error: ErrorResponse {
[0]   status: 404,
[0]   headers: {
[0]     'access-control-expose-headers': 'X-Envoy-Upstream-Service-Time, 
Server, Access-Control-Expose-Headers, Access-Control-Max-Age, Date',
[0]     'access-control-max-age': '86400',
[0]     'content-type': 'application/json',
[0]     date: 'Tue, 17 Mar 2020 18:07:17 GMT',
[0]     server: 'istio-envoy',
[0]     'x-envoy-upstream-service-time': '10',
[0]     'content-length': '209',
[0]     connection: 'close'
[0]   },
[0]   error: 'not_found',
[0]   error_description: 'Not found',
[0]   error_uri: 'https://docs.pusher.com/errors/not_found'
[0] }
{"status":404,"headers":{"access-control-expose-headers":"Date, 
X-Envoy-Upstream-Service-Time, Server, Access-Control-Expose-Headers, 
Access-Control-Max-Age","access-control-max-age":"86400",
"content-type":"application/json","date":"Thu, 09 Apr 2020 02:34:22
 GMT","server":"istio-envoy",
 "x-envoy-upstream-service-time":"11",
"content-length":"209","connection":"close"},
"error":"not_found","error_description":
"Not found","error_uri":"https://docs.pusher.com/errors/not_found"}
仍在学习如何使用React和Node,但我认为错误发生在我的server.js文件中

我的server.js代码如下所示:

const express = require('express')
const bodyParser = require('body-parser')
const cors = require('cors')
const Chatkit = require('pusher-chatkit-server')

const app = express()

const chatkit = new Chatkit.default({
instanceLocator: 'fhdsakfjsdalkfjdsalfjsdlajflsad',
key: 
'ruewioqruewfhdsakljfdsaljfsdlakjds483294'
})

app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
app.use(cors())

app.post('/users', (req, res) => {
  const { username } = req.body

  chatkit
    .createUser({
      name: username,
      id: username
    })
    .then(() => res.sendStatus(201))
    .catch(error => {
      console.log('Error:', error) // updated 
      /*if(error.error_type === 'services/chatkit/user_already_exists') {
        res.sendStatus(200)
      } else {
        res.sendStatus(error.statusCode).json(error)
      }*/
    })
})

const PORT = 3001
app.listen(PORT, err => {
  if (err) {
    console.error(err)
  } else {
    console.log(`Running on port ${PORT}`)
  }
})
基本上,当我在控制台的“网络”选项卡中提交一个名称时,我应该看到帖子,但我没有看到。我只收到了错误信息,但我不知道如何破译它

编辑 在上述代码中添加了console.log('Error:',Error),并在终端中收到以下错误消息:

(node:6248) UnhandledPromiseRejectionWarning: RangeError [ERR_HTTP_INVALID_STATUS_CODE]: Invalid status code: undefined
[0]     at ServerResponse.writeHead (_http_server.js:237:11)
[0]     at ServerResponse._implicitHeader (_http_server.js:228:8)
[0]     at write_ (_http_outgoing.js:616:9)
[0]     at ServerResponse.end (_http_outgoing.js:733:5)
[0]     at ServerResponse.send (D:\htdocs\mern\react-slack-clone\node_modules\express\lib\response.js:221:10)
[0]     at ServerResponse.sendStatus (D:\htdocs\mern\react-slack-clone\node_modules\express\lib\response.js:359:15)
[0]     at D:\htdocs\mern\react-slack-clone\server.js:31:13
[0]     at processTicksAndRejections (internal/process/task_queues.js:93:5)
[0] (node:6248) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise
which was not handled with .catch(). (rejection id: 1)
[0] (node:6248) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero
exit code
Error: ErrorResponse {
[0]   status: 404,
[0]   headers: {
[0]     'access-control-expose-headers': 'X-Envoy-Upstream-Service-Time, 
Server, Access-Control-Expose-Headers, Access-Control-Max-Age, Date',
[0]     'access-control-max-age': '86400',
[0]     'content-type': 'application/json',
[0]     date: 'Tue, 17 Mar 2020 18:07:17 GMT',
[0]     server: 'istio-envoy',
[0]     'x-envoy-upstream-service-time': '10',
[0]     'content-length': '209',
[0]     connection: 'close'
[0]   },
[0]   error: 'not_found',
[0]   error_description: 'Not found',
[0]   error_uri: 'https://docs.pusher.com/errors/not_found'
[0] }
{"status":404,"headers":{"access-control-expose-headers":"Date, 
X-Envoy-Upstream-Service-Time, Server, Access-Control-Expose-Headers, 
Access-Control-Max-Age","access-control-max-age":"86400",
"content-type":"application/json","date":"Thu, 09 Apr 2020 02:34:22
 GMT","server":"istio-envoy",
 "x-envoy-upstream-service-time":"11",
"content-length":"209","connection":"close"},
"error":"not_found","error_description":
"Not found","error_uri":"https://docs.pusher.com/errors/not_found"}
我不明白这个错误消息的意思。我检查了error_uri提供的URL,该页面上的消息是:“服务器找不到请求的资源。请确保您请求的资源的名称是正确的。”我不完全确定这意味着什么

编辑2 我对app.post进行了以下更改,试图产生另一个终端错误,如下所示:

app.post('/users', (req, res) => {
  const { username } = req.body

  chatkit
    .createUser({
      name: username,
      id: username
    })
    .then(() => res.sendStatus(201))
    .catch(error => {
      //console.log('Error:', error)
      if(error.error_type === 'services/chatkit/user_already_exists') {
        res.sendStatus(200)
      } else {
        //res.sendStatus(error.statusCode).json(error)
        res.sendStatus(500)
        console.log(JSON.stringify(error))
      }
    })
})
我在终端收到了以下回复:

(node:6248) UnhandledPromiseRejectionWarning: RangeError [ERR_HTTP_INVALID_STATUS_CODE]: Invalid status code: undefined
[0]     at ServerResponse.writeHead (_http_server.js:237:11)
[0]     at ServerResponse._implicitHeader (_http_server.js:228:8)
[0]     at write_ (_http_outgoing.js:616:9)
[0]     at ServerResponse.end (_http_outgoing.js:733:5)
[0]     at ServerResponse.send (D:\htdocs\mern\react-slack-clone\node_modules\express\lib\response.js:221:10)
[0]     at ServerResponse.sendStatus (D:\htdocs\mern\react-slack-clone\node_modules\express\lib\response.js:359:15)
[0]     at D:\htdocs\mern\react-slack-clone\server.js:31:13
[0]     at processTicksAndRejections (internal/process/task_queues.js:93:5)
[0] (node:6248) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise
which was not handled with .catch(). (rejection id: 1)
[0] (node:6248) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero
exit code
Error: ErrorResponse {
[0]   status: 404,
[0]   headers: {
[0]     'access-control-expose-headers': 'X-Envoy-Upstream-Service-Time, 
Server, Access-Control-Expose-Headers, Access-Control-Max-Age, Date',
[0]     'access-control-max-age': '86400',
[0]     'content-type': 'application/json',
[0]     date: 'Tue, 17 Mar 2020 18:07:17 GMT',
[0]     server: 'istio-envoy',
[0]     'x-envoy-upstream-service-time': '10',
[0]     'content-length': '209',
[0]     connection: 'close'
[0]   },
[0]   error: 'not_found',
[0]   error_description: 'Not found',
[0]   error_uri: 'https://docs.pusher.com/errors/not_found'
[0] }
{"status":404,"headers":{"access-control-expose-headers":"Date, 
X-Envoy-Upstream-Service-Time, Server, Access-Control-Expose-Headers, 
Access-Control-Max-Age","access-control-max-age":"86400",
"content-type":"application/json","date":"Thu, 09 Apr 2020 02:34:22
 GMT","server":"istio-envoy",
 "x-envoy-upstream-service-time":"11",
"content-length":"209","connection":"close"},
"error":"not_found","error_description":
"Not found","error_uri":"https://docs.pusher.com/errors/not_found"}

我不知道这是什么意思

res.sendStatus
失败,错误为“无效状态代码:未定义”。查看代码,状态代码唯一可变的地方是
res.sendStatus(error.statusCode).json(error)
。因此
错误。statusCode
未定义。可能是
statusCode
还是
status\u code
?Chatkit的API文档会告诉你。你可能想在
catch
中记录错误,这样你就可以看到错误是否有状态码属性。在catch中,我删除了if/else并使用了“console.log(error)”,但控制台中没有返回任何内容。我只是注意到在网络下,状态显示为“待定”,并且已经持续了相当长的一段时间。想法?是的,前端永远不会收到服务器的响应,因为它崩溃了,这很正常。可能需要添加一个express。