我有一个使用java的grpcDemo服务端正在监听9999端口 想在vue中使用grpc完成远程过程调用 可是出现了错误 我使用了webstrom构建了vue项目
package.json
{
"name": "mountains-ui",
"version": "0.1.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint"
},
"dependencies": {
"core-js": "^3.6.5",
"grpc": "^1.24.4",
"vue": "^2.6.11",
"vuetify": "^2.4.0"
},
"devDependencies": {
"@google-cloud/vision": "^2.3.0",
"@grpc/proto-loader": "^0.5.6",
"@vue/cli-plugin-babel": "~4.5.0",
"@vue/cli-plugin-eslint": "~4.5.0",
"@vue/cli-service": "~4.5.0",
"babel-eslint": "^10.1.0",
"eslint": "^6.7.2",
"eslint-plugin-vue": "^6.2.2",
"sass": "^1.32.0",
"sass-loader": "^10.0.0",
"vue-cli-plugin-vuetify": "^2.1.0",
"vue-template-compiler": "^2.6.11",
"vuetify-loader": "^1.7.0"
},
"eslintConfig": {
"root": true,
"env": {
"node": true
},
"extends": [
"plugin:vue/essential",
"eslint:recommended"
],
"parserOptions": {
"parser": "babel-eslint"
},
"rules": {}
},
"browserslist": [
"> 1%",
"last 2 versions",
"not dead"
]
}
test.proto
syntax = "proto3";
// 服务接口.定义请求参数和相应结果
service AddService {
rpc add (AddRequest) returns (AddReply) {
}
}
// 定义请求体
message AddRequest {
int32 a = 1;
int32 b = 2;
}
// 定义相应内容
message AddReply {
int32 c = 1;
}
我使用了项目自动生成的vue文件测试页面
Helloworld.vue
<template>
<v-container>
<v-btn
@click="on">
hello
</v-btn>
</v-container>
</template>
<script>
export default {
name: 'HelloWorld',
data: () => ({
}),
methods: {
on(){
var PROTO_PATH = __dirname + '/../../proto/test.proto';
var grpc = require('grpc');
var protoLoader = require('@grpc/proto-loader');
// Suggested options for similarity to existing grpc.load behavior
var packageDefinition = protoLoader.loadSync(
PROTO_PATH,
{keepCase: true,
longs: String,
enums: String,
defaults: true,
oneofs: true
});
var protoDescriptor = grpc.loadPackageDefinition(packageDefinition);
// The protoDescriptor object has the full package hierarchy
var productInfo = protoDescriptor.ecommerce;
var client = new productInfo.AddService('localhost:9999',
grpc.credentials.createInsecure());
let productID = 0;
client.add({
a: 1,
b: 4
}, (error, response) => {
if (!error) {
console.log("Response : ", response);
productID = response.value;
console.log(productID)
} else {
console.log("Error:", error.message);
}
});
}
}
}
</script>
当我在按动这个按钮时
提示如下
[Vue warn]: Error in v-on handler: "TypeError: Cannot read property 'substr' of undefined"
found in
---> <VBtn>
<HelloWorld> at src/components/HelloWorld.vue
<VMain>
<VApp>
<App> at src/App.vue
<Root>
warn @ webpack-internal:///./node_modules/vue/dist/vue.runtime.esm.js:620
webpack-internal:///./node_modules/vue/dist/vue.runtime.esm.js:1887 TypeError: Cannot read property 'substr' of undefined
at Object.eval (webpack-internal:///./node_modules/node-pre-gyp/lib/util/napi.js:8)
at eval (webpack-internal:///./node_modules/node-pre-gyp/lib/util/napi.js:206)
at Object../node_modules/node-pre-gyp/lib/util/napi.js (chunk-vendors.js:4006)
at __webpack_require__ (app.js:849)
at fn (app.js:151)
at Object.eval (webpack-internal:///./node_modules/node-pre-gyp/lib/util/versioning.js:9)
at eval (webpack-internal:///./node_modules/node-pre-gyp/lib/util/versioning.js:333)
at Object../node_modules/node-pre-gyp/lib/util/versioning.js (chunk-vendors.js:4018)
at __webpack_require__ (app.js:849)
at fn (app.js:151)
我只知道第一次错误似乎和node-pre-gyp有关 我是一个新手 查阅了内外网 没有找到和我一样的错误 希望各位大神能给予帮助
语法错误