代码之家  ›  专栏  ›  技术社区  ›  Ooker

为什么处理程序中的返回文字会创建“TypeError:应为分号”?

  •  0
  • Ooker  · 技术社区  · 1 年前

    这是我的工作 index.tsx 路线:

    import { Handlers, PageProps } from "$fresh/server.ts";
    
    export const handler: Handlers<Data> = {
      GET(req, ctx) {
        const a = 'hello'
        return ctx.render({ a })
      },
    };
    
    export default function Home({ data }: PageProps<Data>) {
      return (
        <>
          {JSON.stringify(data) } 
        </>
      );
    }
    

    但是,如果我将处理程序更改为:

    const a = 'hello'
    return ctx.render({ a })
    

    至:

    return ctx.render({ 'hello' })
    

    我收到以下错误:

    error: Uncaught (in promise) TypeError: Expected a semicolon at file:///D:/QC%20supplements/Code/Apps/trankyweb/routes/index.tsx:24:33
    
          return ctx.render({ 'hello' })
                                      ~
      const manifest = (await import(toFileUrl(join(dir, "fresh.gen.ts")).href))
                        ^
        at async dev (https://deno.land/x/[email protected]/src/dev/dev_command.ts:38:21)
        at async file:///D:/QC%20supplements/Code/Apps/trankyweb/dev.ts:5:1
    Watcher Process failed. Restarting on file change...
    

    这是什么意思?我读过 SyntaxError: missing ; before statement - JavaScript | MDN 但我不明白这是怎么回事。

    这个 fresh.gen.ts 文件是自动生成的。以下是的内容 dev.ts :

    #!/usr/bin/env -S deno run -A --watch=static/,routes/
    
    import dev from "$fresh/dev.ts";
    
    await dev(import.meta.url, "./main.ts");
    
    1 回复  |  直到 1 年前
        1
  •  1
  •   Lazar Dilov    1 年前

    因为ctx.render()期望对象:{a}等效于{a:a}的值。这不是您认为正在使用的jsx模板,这是期望对象的函数调用。通过提供字符串文字,我们无法知道哪个是键,哪个是值,这对于对象初始化来说是无效的es6简写语法。

    a='asd'
    const obj = {a}
    

    obj是{a:“asd”}

    但是,初始值设定项中仅提供字符串文字是无效的es6简写sybtax。因为ctx.render是函数调用,所以它不需要jsx模板语法,而是对象