내 라우팅을 분류하는 데 'express-namespace'를 사용하고 있습니다. 내 코드는 다음과 같습니다.nodejs/expressjs의 "정의되지 않은 함수가 아닙니다"
...
4 var Users = {
5 };
6
7 Users.create = function(req, result){
...
22 }
23
24 exports.Users = Users;
25
내 포인트는 하나의 .js 파일로 내 컨트롤러 코드를 이동하고 소문자 대응에 내 모든 컨트롤러를 매핑하는 것입니다
..
9 var controllers = require('./controllers');
10 require('express-namespace');
..
46
47 app.namespace('/json', function(){
48 app.post('/', function(req, res, next){
49 res.header('Content-Type', 'application/json');
50 next();
51 });
52 /**
53 * Map the controller objects and its actions
54 * to the corresponding URL in lower case
55 */
56 for(var controller in controllers){
57 app.namespace('/' + controller.toLowerCase(), function(){
58 controller = controllers[controller];
59 for(var action in controller){
60 app.post('/' + action.toLowerCase(), function(req,res){
61 action = controller[action];
62 action(req, function(result){
63 res.send(result);
64 });
65 });
66 }
67 });
68 }
69 });
여기 내 ./controllers.js 코드 URL 그래서 내 애플 꽤 깔끔한입니다.
'노드 app.js'를 실행할 때마다 첫 번째 POST에 매우 효과적입니다. 내가 두 번째로 URL에 POST 경우 는 다음과 같은 예외 가 발생
TypeError: undefined is not a function
at CALL_NON_FUNCTION (native)
at /home/carl/source/node/funner/app.js:62:21
at callbacks (/usr/local/lib/node/.npm/express/2.4.6/package/lib/router/index.js:272:11)
at param (/usr/local/lib/node/.npm/express/2.4.6/package/lib/router/index.js:246:11)
at pass (/usr/local/lib/node/.npm/express/2.4.6/package/lib/router/index.js:253:5)
at Router._dispatch (/usr/local/lib/node/.npm/express/2.4.6/package/lib/router/index.js:280:4)
at Object.handle (/usr/local/lib/node/.npm/express/2.4.6/package/lib/router/index.js:45:10)
at next (/usr/local/lib/node/.npm/connect/1.7.0/package/lib/http.js:201:15)
at /usr/local/lib/node/.npm/connect/1.7.0/package/lib/middleware/session.js:323:9
at /usr/local/lib/node/.npm/connect/1.7.0/package/lib/middleware/session.js:342:9
사람이 여기 나에게 힌트를 줄 수 있습니까?