0

所以我不断收到这个“位置 0 的 JSON 中的意外令牌 u”错误。我目前正在从向客户 gRPC 服务器发出 gRPC 请求的主要发起方发出请求。

当我不将我的文件容器化并在每个目录中手动 npm install 包时,它可以顺利运行。但是,由于某种原因,当我将文件容器化时,它会出现这个问题。

通常这个问题发生在异步请求中(gRPC 是异步的,所以很有意义),我认为他们正在竞相完成,但永远不会这样做。但是 dockerFile 实际上是在做我正在手动做的事情(这有效......)

我现在只是不知道为什么会这样。

错误

Error:
undefined:1
undefined
^

SyntaxError: Unexpected token u in JSON at position 0
    at JSON.parse (<anonymous>)
    at horus.grabTrace (/usr/src/app/horus/horus.js:52:23)
    at ClientUnaryCall.<anonymous> (/usr/src/app/main.js:119:8)
    at ClientUnaryCall.emit (events.js:210:5)
    at Object.onReceiveMetadata (/usr/src/app/node_modules/grpc/src/client_interceptors.js:1202:15)
    at InterceptingListener._callNext (/usr/src/app/node_modules/grpc/src/client_interceptors.js:568:42)
    at InterceptingListener.onReceiveMetadata (/usr/src/app/node_modules/grpc/src/client_interceptors.js:582:8)
    at callback (/usr/src/app/node_modules/grpc/src/client_interceptors.js:845:24)

文件结构

**3 Different Services**

**Books**
-stubs
  -booksStub
-BooksServer.js

**Customers**
-stubs (2 stubs for intraservice request)
  -booksStub
  -customersStub 
-customersServer.js
-Dockerfile

**Main**
-Main Initiator
-Dockerfile

Docker 文件(全部)

**Dockerfile (Customers Service)**
FROM node:12.14.0
WORKDIR /usr/src/app
COPY package*.json ./
COPY . /usr/src/app
RUN npm install
RUN npm install nodemon -g
EXPOSE 6000
CMD ["nodemon", "customersServer.js"]

**Dockerfile (Books Service)**
FROM node:12.14.0
WORKDIR /usr/src/app
COPY package*.json ./
COPY . /usr/src/app
RUN npm install
RUN npm install nodemon -g
EXPOSE 30043
CMD ["nodemon", "booksServer.js"]

**Dockerfile (Main Service)**
FROM node:12.14.0
WORKDIR /usr/src/app
COPY package*.json ./
COPY . /usr/src/app
RUN npm install
EXPOSE 4555
CMD ["node", "main.js"]
4

1 回答 1

1

此 JSON 解析错误是根本问题的症状,即某些代码需要 JSON 字符串并且正在获取undefined. 问题中的信息不足以确定发生这种情况的确切原因,但堆栈跟踪在JSON.parse调用和来自 gRPC 库的事件之间有两个条目:

    at JSON.parse (<anonymous>)
>   at horus.grabTrace (/usr/src/app/horus/horus.js:52:23)
>   at ClientUnaryCall.<anonymous> (/usr/src/app/main.js:119:8)
    at ClientUnaryCall.emit (events.js:210:5)

这表明在第 52 行,horus.js正在调用JSON.parse,错误表明它正在传递undefined"undefined"代替 JSON 字符串。这一行又在horus.grabTrace函数中,该函数是从第 119 行的匿名事件处理程序调用的main.js。因此,要么此事件处理程序将无效数据传递给horus.grabTrace,要么它正在传递有效数据horus.grabTrace但处理不正确。这又可能是由事件处理程序接收到意外值引起的。

一个简单的调试方法是在事件处理程序中try...catch的调用周围添加一个块horus.grabTrace,当出现错误时,将传递给事件处理程序的值和传递给的值注销horus.grabTrace,然后将错误重新抛出到停止执行。这将告诉您您的代码未正确处理哪个值,这将帮助您了解要更改的内容。

于 2020-07-31T20:48:26.127 回答