【问题标题】:SyntaxError: Unexpected token Node js tutorialSyntaxError: Unexpected token Node js 教程
【发布时间】:2015-08-14 12:56:49
【问题描述】:

所以我正在做这个教程https://scotch.io/tutorials/build-a-restful-api-using-node-and-express-4,当我尝试启动服务器时,我得到了这个错误

/server.js:84
 .put(function(req, res) {
 ^
SyntaxError: Unexpected token .
    at exports.runInThisContext (vm.js:73:16)
    at Module._compile (module.js:443:25)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Function.Module.runMain (module.js:501:10)
    at startup (node.js:129:16)
    at node.js:814:3

这就是我的代码的样子

// server.js

  var router = express.Router();              // get an instance of the express Router
  // middleware to use for all requests
  router.use(function(req, res, next){
      // do logging
      console.log('For every request this message is being shown.');
      next(); // make sure we go to the next routes and don't stop here
  });

  // test route to make sure everything is working
  router.get('/', function(req, res){
    res.json({ message: 'Whatsup Welcome to my first node api!'});
  });

  // more routes for our API will continue here
  // on routes that end in /Bears
  router.route('/bears')

    // create a bear (accessed at POST http://localhost:8080/bears)
    .post(function(req, res) {

        var bear = new Bear();      // create a new instance of the Bear model
        bear.name = req.body.name;  // set the bears name (comes from the request)

        bear.save(function(err) {
            if (err)
                res.send(err);

            res.json({ message: 'Bear has been born!' });
        });


    })

    // get all the bears (accessed at GET http://localhost:8080/api/bears)
    .get(function(req, res) {
        Bear.find(function(err, bears) {
            if (err)
                res.send(err);

            res.json(bears);
        });
    });
  // on routes that end in /bears/:bear_id
  // ------------------------------------------------
  router.route('/bears/:bear_id')
  // get all the bears (accessed at GET http://localhost:8080/api/bears/:bear_id)
"line :84 ->>>" .get(function(req, res) {
        Bear.find(function(err, bears) {
            if (err)
                res.send(err);
            res.json(bears);
        });
    });

  // update the bear with this id (accessed at PUT http://localhost:8080/api/bears/:bear_id)
 .put(function(req, res) {
      // use our bear model to find the bear we want
      Bear.findById(req.params.bear_id, function(err, bear) {

          if (err)
              res.send(err);

          bear.name = req.body.name;  // update the bears info

          // save the bear
          bear.save(function(err) {
              if (err)
                  res.send(err); }

              res.json({ message: 'Bear updated!' });
          });

      });
  });

  // REGISTER OUR ROUTES here
  // all of our routes will be prefixed with /api
  app.use('/api', router);

  // START THE server

  app.listen(port);
  console.log('Magic is happening on port:' + port);

【问题讨论】:

  • 无论你用什么来编辑你的代码,都应该支持某种内置的“linting”(验证你的语法),它会为你突出这些容易犯的错误。您甚至可以使用jsFiddleCodePen 等免费在线工具将您的 JS 放入其中,“整理”它以保持一致的格式和可读性,并为您突出显示任何错误。这是your code in a CodePen,它在右下角向您显示一个小错误图标,您可以单击该图标以查看违规行。

标签: javascript node.js


【解决方案1】:

标记为 84 的行不是错误所在。它在您在该块之后调用的下一个函数中:

// on routes that end in /bears/:bear_id
  // ------------------------------------------------
  router.route('/bears/:bear_id')
  // get all the bears (accessed at GET http://localhost:8080/api/bears/:bear_id)
"line :84 ->>>" .get(function(req, res) {
        Bear.find(function(err, bears) {
            if (err)
                res.send(err);
            res.json(bears);
        });
    });

您刚刚使用分号完成了这个 get() 调用,但随后您继续对预期对象调用下一个函数:

  // update the bear with this id (accessed at PUT http://localhost:8080/api/bears/:bear_id)
 .put(function(req, res) {
      // use our bear model to find the bear we want
      Bear.findById(req.params.bear_id, function(err, bear) {

          if (err)
              res.send(err);

          bear.name = req.body.name;  // update the bears info

          // save the bear
          bear.save(function(err) {
              if (err)
                  res.send(err); }



  res.json({ message: 'Bear updated!' });
      });

  });
});

如果您删除了.put(function(req, res){ 行之前的分号,它不应该有语法错误。

【讨论】:

  • 另外,我猜"line : 84 ->>>" 字符串也不应该存在。它最终会尝试在字符串上调用.get(),这很可能不起作用(但直到运行时才知道)。
  • 你说得对,GregL - 我以为 OP 只是把它放在那里是为了在源代码中标记行号所在的位置。
  • @AaronD 我刚刚检查了它,是的,非常感谢这是修复。
猜你喜欢
  • 1970-01-01
  • 2019-08-08
  • 2020-12-09
  • 2016-06-23
  • 2021-11-02
  • 2020-11-02
  • 2017-06-10
  • 1970-01-01
  • 2017-03-29
相关资源
最近更新 更多