【问题标题】:SyntaxError: Unexpected token { when compiling my node.js codeSyntaxError: Unexpected token { 编译我的 node.js 代码时
【发布时间】:2022-01-24 17:49:40
【问题描述】:

当我尝试运行 grandstack neo4j graphql api 应用程序时,每次第一次“导入”时都会出现以下错误。

PS C:\Users\grand-stack-starter-master\api> nodemon index.js
[nodemon] 1.19.1
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `node index.js src/index.js`
C:\Users\grand-stack-starter-master\api\src\index.js:1
import { typeDefs } from "./graphql-schema";
       ^

SyntaxError: Unexpected token {
    at Module._compile (internal/modules/cjs/loader.js:723:23)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)
    at startup (internal/bootstrap/node.js:283:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)
[nodemon] app crashed - waiting for file changes before starting... 

下面是我的 grandstack node.js 代码

import { typeDefs } from "./graphql-schema";
import { ApolloServer } from "apollo-server";
import { v1 as neo4j } from "neo4j-driver";
import { makeAugmentedSchema } from "neo4j-graphql-js";
import dotenv from "dotenv";

// set environment variables from ../.env
dotenv.config();


const schema = makeAugmentedSchema({
  typeDefs
});


const driver = neo4j.driver(
  process.env.NEO4J_URI || "bolt://localhost:7687",
  neo4j.auth.basic(
    process.env.NEO4J_USER || "neo4j",
    process.env.NEO4J_PASSWORD || "xxxx"
  )
);


const server = new ApolloServer({
  context: { driver },
  schema: schema
});

server.listen(process.env.GRAPHQL_LISTEN_PORT, "0.0.0.0").then(({ url }) => {
  console.log(`GraphQL API ready at ${url}`);
});

每个导入语句都会出现此错误。 如果我从代码中删除有问题的导入(例如:import { typeDefs } from "./graphql-schema";) 那么我在下一次导入时会遇到同样的错误,如下所示

import { ApolloServer } from "apollo-server";
       ^

SyntaxError: Unexpected token {
    at Module._compile (internal/modules/cjs/loader.js:723:23)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)
    at startup (internal/bootstrap/node.js:283:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)
[nodemon] app crashed - waiting for file changes before starting...

谁能帮我确定哪里出错了

【问题讨论】:

    标签: node.js neo4j graphql grandstack


    【解决方案1】:

    您的 package.json 似乎有问题。

    当你启动 api 我看到这个命令:

    [nodemon] starting `node index.js src/index.js`
    

    所以您没有使用 babel 来转译代码,这可能就是您的导入不起作用的原因。您应该使用 grand-stack-starter(从网站下载)中的 package.json 调用正确的命令来启动具有 babel 支持的 api 服务器。

    "start": "./node_modules/.bin/nodemon --exec babel-node src/index.js"
    

    正如您所看到的,此命令使用 babel-node 使用 babel 转译您的代码,这增加了对您现在应该可以正常工作的导入的支持,并且您只需启动 npm 即可运行 api。如果你使用来自 github 存储库的包,代码略有不同,你应该使用 npm 命令:

    npm start-dev
    

    【讨论】:

    • 感谢@M4v1 的快速回复!解决了我的问题!
    【解决方案2】:

    在我的情况下,我在使用命令时位于错误的文件夹中,对于遇到相同问题的其他人来说,这也可能是原因,因此请确保您位于服务器文件夹中。 我的案例是 Express.js。

    编码愉快!

    【讨论】:

    • 这真的没有回答问题,更多的是评论。
    【解决方案3】:

    当我使用可选链接访问嵌套对象时,我遇到了同样的错误,一旦我删除它,我的错误得到了解决。

    【讨论】:

    • 这并不能真正回答问题。如果您有其他问题,可以点击 提问。要在此问题有新答案时收到通知,您可以follow this question。一旦你有足够的reputation,你也可以add a bounty 来引起对这个问题的更多关注。 - From Review
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 2017-11-05
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多