意外的令牌:Express和nodejs

当试图加载脚本我得到以下错误:

名称:this.name,在线57

一只繁忙的猫

var redis = require('redis'); var db = redis.createClient(); module.exports = Card; function Card(obj) { for(var key in obj) { this[key] = obj[key]; } } Card.prototype.save = function(fn) { if(this.id) { this.update(fn); } else { var card = this; db.incr('card:ids', function(err, id) { if(err) return fn(err); card.id = id; user.update(fn); }); } }; Card.prototype.update = function(fn) { var card = this; var id = card.id; var name = card.name; var type = card.type; var manaCost = card.manaCost; var attackPoints = card.att; var magicPoints = card.magic; var soulPoints = card.soul; var cardImage = card.cardImage; db.set('card:id:' + card.name, id, function(err) { if (err) return fn(err); db.hmset('card:' + id, name, type, manaCost, attackPoints, magicPoints, soulPoints, cardImage, function(err) { fn(err); }); }); }; Card.prototype.toJSON = function() { return { id: this.id, name: this.name, type: this.type, manaCost: this.manaCost, attackPoints: this.attackPoints, magicPoints: this.magicPoints, soulPoints: this soulPoints, cardImage: this.cardImage } }; var aquaDragon = new Card({ name: 'Aqua Dragon', type: 'Rain', manaCost: '6', attackPoints: '4', magicPoints: '5', soulPoints: '6', cardImage: '/images/Monsters/Aqua%20Dragon.png' }); var fireElemental = new Card({ name: 'Fire Elemental', type: 'Sun', manaCost: '2', attackPoints: '0', magicPoints: '2', soulPoints: '2' cardImage: '/images/Monsters/Fire%20Elemental.png' }); aquaDragon.save(function(err){ if (err) throw err; console.log('user id %d', aquaDragon.id); }); fireElemental.save(function(err){ if (err) throw err; console.log('user id %d', fireElemental.id); }); 

问题是.toJSON方法。 当使用名称:当在我的其他脚本中使用它正在工作找不到问题

你正在处理自动分号插入:

代替

 return // ; a semicolon is automatically inserted here { 

使用

 return { 

阅读更多:

  • JavaScript的自动分号插入(ASI)有哪些规则?
  • 我听说Javascript插入“;” 自动,这可能会导致问题

不要这样写return

 return { id: this.id, 

代替

 return { id: this.id, 

因为Java脚本通过插入分号结束return语句。

{应该与return语句在同一行,因为JS解释器在同一行上的return语句之后插入一个。

我强烈build议完全停止使用分号并学习ASI是如何工作的,因为如果没有,你偶尔会碰到这些错误…