題名のとおりなんですが、新規アクションを追加する段階で結構ハマってしまいました。
メモメモ。

コントローラをgenerateする

1
$ sails generate controller test index

ってすると、”index”というアクションを持つ”test”というコントローラを作ることができます。
このアクションには、http://localhost:1337/test/index 的なURLでアクセスできます。
ここまではいいと。

アクションが追加できない?

生成されたコントローラは以下のとおり。 /api/controllers/xxxController.jsという名前で生成されます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
 * TestController
 *
 * @description :: Server-side logic for managing tests
 * @help        :: See http://links.sailsjs.org/docs/controllers
 */

module.exports = {
  


  /**
   * `TestController.index()`
   */
  index: function (req, res) {
    return res.json({
      todo: 'index() is not implemented yet!'
    });
  }
};

ここに、このように追加したんですね。そのまんま。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/**
 * TestController
 *
 * @description :: Server-side logic for managing tests
 * @help        :: See http://links.sailsjs.org/docs/controllers
 */

module.exports = {
  


  /**
   * `TestController.index()`
   */
  index: function (req, res) {
    return res.json({
      todo: 'index() is not implemented yet!'
    });
  }


  test: function (req, res) {
    return res.json({
      todo: 'index() is not implemented yet!'
    });
  }

};

そしたら、エラーが出てsailsが起動しない!

解決

1
2
3
4
5
6
7
8
9
10
11
SyntaxError: Unexpected token ;
    at Module._compile (module.js:439:25)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at /Users/owner/.nvm/v0.10.25/lib/node_modules/sails/node_modules/include-all/index.js:129:29
    at Array.forEach (native)
    at requireAll (/Users/owner/.nvm/v0.10.25/lib/node_modules/sails/node_modules/include-all/index.js:44:9)
    at buildDictionary (/Users/owner/.nvm/v0.10.25/lib/node_modules/sails/node_modules/sails-build-dictionary/index.js:68:14)

こんなエラーが出たわけですよ。

この中で、Array.forEachという項目が気になりまして。自動生成した他のコントローラをよーく見てみると、

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
module.exports = {
  


  /**
   * `TestController.index()`
   */
  index: function (req, res) {
    return res.json({
      todo: 'index() is not implemented yet!'
    });
  },


  test: function (req, res) {
    return res.json({
      todo: 'index() is not implemented yet!'
    });
  }

};

アクションの終端にカンマが入っていました。つまり、module.exportsの中身はjsonで記述されていたんですね。
ただのfunctionだと思って騙されてました、、、TestControllerにもカンマを追加したら、無事起動しました。

sailsの洗礼を受けました。