SyntaxError: неожиданный токен - PullRequest
0 голосов
/ 28 января 2019

Нет изменений, внесенных в файл lang.js с нескольких месяцев назад, но внезапно возникает ошибка синтаксиса при попытке предварительного просмотра локально, и не удается развернуть изменения

Не уверен, почему это происходит - может кто-нибудь, пожалуйста, помогите?Большое спасибо!

Раскрытие информации / предупреждение: у меня 0 знаний по программированию.

MacBook:pty-bus Ying$ node index.js
/Users/Ying/Desktop/pty-bus/lang.js:19
    ...req.lang.marketing.global,
    ^^^
SyntaxError: Unexpected token ...
    at Object.exports.runInThisContext (vm.js:78:16)
    at Module._compile (module.js:543:28)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:488:32)
    at tryModuleLoad (module.js:447:12)
    at Function.Module._load (module.js:439:3)
    at Module.require (module.js:498:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/Users/Ying/Desktop/pty-bus/index.js:20:36)
    at Module._compile (module.js:571:32)

lang.js

var path = require('path');

function langMiddleware(req, res, next){
  let lang = req.query.lang || 'en';

  if(['es', 'en'].indexOf(lang) == -1) lang = 'en'

  fs.readFile(path.join(__dirname, 'lang', lang + '.json'), 'utf8', function(err, data){
    req.lang = JSON.parse(data);
    req.langCode = lang;
    next();
  })
};


function render(req, res, template, vars={}){
  let renderObj = {
    ...req.lang.marketing.global,
    title: req.lang.titles[template],
    site_title: req.lang.site_title,
    site_description: req.lang.site_description,
    ...(req.lang.marketing[template] || {}),
    lang: {...(req.lang.marketing.global.language || {})},
    langCode: req.langCode,
    ...vars,
    path: req.path
  };

  res.render(template, renderObj);
}

module.exports = { langMiddleware, render }

Ответы [ 3 ]

0 голосов
/ 28 января 2019

Tt выглядит как узел v7.4.0, не поддерживающий оператор распространения - измените let renderObj = {...} на

let renderObj = {
    title: req.lang.titles[template],
    site_title: req.lang.site_title,
    site_description: req.lang.site_description,
    langCode: req.langCode,
    path: req.path
  };

Object.assign(renderObj,
  req.lang.marketing.global,
  (req.lang.marketing[template] || {}),
  vars
);  
renderObj.lang = Object.assign({}, (req.lang.marketing.global.language || {}));
0 голосов
/ 28 января 2019

Node.js v7.4.0 имеет V8 5.4, который поддерживает оператор ... для массивов, но не для объектов.Вам нужно по крайней мере V8 6.0 , то есть будет работать последняя версия ветки Node.js 8 (v8.15.0).

0 голосов
/ 28 января 2019

Похоже, что ваша возможность использовать оператор распространения была удалена.Я полагаю, что вы недавно изменили версию своего узла или отредактировали конфигурацию babelrc или webpack.В любом случае, я не думаю, что с вашим текущим кодом в этом файле все в порядке.

...