【问题标题】:export default routes; SyntaxError in NodeJS导出默认路由; NodeJS 中的语法错误
【发布时间】:2018-03-12 20:08:07
【问题描述】:
const routes = (app) => {
  app.route('/contact')
  .get((req, res, next) => {
      // middleware
      console.log(`Request from: ${req.originalUrl}`)
      console.log(`Request type: ${req.method}`)
      next();
    }, (req, res, next) => {
      res.send('GET request successful!!!!');
  })

  .post((req, res) =>
    res.send('POST request successful!!!!'));

  app.route('/contact/:contactId')
  .put((req, res) =>
    res.send('PUT request successful!!!!'))

  .delete((req, res) =>
    res.send('DELETE request successful!!!!'));
}

export default routes;

执行时产生此错误:

export default routes;
^^^^^^

SyntaxError: Unexpected token export

我实际上是在尝试在培训视频中跟随,所以我对此有点陌生。据我了解,他正在尝试使用 ES6,并且我知道一些命令,例如 import,在 node ver 9 中本身是不可用的。这可能是其中之一吗?有其他选择吗?

【问题讨论】:

  • 如果在“路由”初始化表达式后添加分号会怎样?
  • 你的意思是:app.route('/contact')
  • 这是在您的主脚本中还是在使用require() 导入的文件中?您只能通过导入脚本export。
  • 这个文件正在使用 const routes = require(filepath) 导入到主脚本中

标签: javascript node.js mongodb terminal


【解决方案1】:

尝试使用module.exports.routes;

您想使用 ES6 模块语法。 这意味着应该支持 ES6 Module 语法。

您至少可以通过两种方式进行:

  • 使用 babel npm 包转译 ES6 风格
  • 重构以使用上述语法。

【讨论】:

  • routes(app) ^ TypeError: routes is not a function
  • 在另一个文件中可以写(索引是导出路由的文件): var express = require('express'); var routes = require('./index'); var app = express();然后是路线(应用程序)。
【解决方案2】:

您需要在根文件夹中创建一个与 server.js 或 index.js 相同的 .babelrc 文件,并像这样添加和对象:

{
    "presets": [
        "env",
        "stage-0"
    ]
}

这将告诉节点使用预设的 env 和 stage-o。我假设你下载了 babel 插件。

以防万一记得用这个配置 server.js(在我的例子中):

"scripts": {
    "start": "nodemon ./server.js --exec babel-node -e js"
  },

使用 ES6 模块语法。

【讨论】:

    【解决方案3】:

    节点版本 8.x.x 不支持导入。使用最新版本的节点 9.x.x,错误就会消失。另外,您可以使用 babel 转译您的代码。

    【讨论】:

    • 在终端执行 node -v 后,我好像已经在 v9.5.0 上了
    【解决方案4】:

    您的 Node 项目很可能未设置为使用 ES6 模块加载。

    Node 使用称为 CommonJS 标准的旧模块加载标准。为了让您的项目使用 ES6 模块加载方式,您需要使用 babel 和 webpack 之类的工具。

    如果您搜索我的姓名和教程,我会在 3 分钟内展示如何设置它。在示例中,它还设置了一个 React 项目,您只会对除此之外的所有内容感兴趣。

    【讨论】:

    • 他们让我在 package.json 文件中设置 Babel:{ "name": "crm", "version": "1.0.0", "description": "", "main" : "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "nodemon ./index.js = --exec babel-node -e js" }
    • babel 加载模块的能力是由于一个名为 babel-loader 的插件,它与 babel-cli 等其他 babel 插件分开......
    • 我明白了,现在会是 babel-webpack-plugin 吗? nourish.je/hello-webpack-2-goodbye-babel-loader
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    • 2021-02-07
    • 2020-02-22
    相关资源
    最近更新 更多