gRPC节点错误:JSON中位置0处出现意外的令牌u



所以我一直收到"JSON中位置0处的意外令牌u"错误。我目前正在从主启动器发出请求,主启动器正在向客户gRPC服务器发出gRPC请求。

当我不将我的文件容器化,并在每个目录中手动npm安装包时,它工作得很顺利。但是,由于某种原因,当我将文件装入容器时,它会出现这个问题。

通常这个问题发生在异步请求中(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"]

这个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函数中,该函数是从main.js的第119行上的匿名事件处理程序调用的。因此,要么该事件处理程序正在向horus.grabTrace传递无效数据,要么它正在传递有效数据而horus.grabTrace处理不正确。这反过来可能是由事件处理程序接收到意外值引起的。

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

最新更新