2013-05-18 5 views
0

я получаю следующий тип ошибки при запуске приложения Node.jsTypeError: объект не является функцией - Node.js/выразить

/Users/khinester/Sandboxes/zeitgeist/Blade/server.js:5 
    application = require("./.app/")(); 
           ^
TypeError: object is not a function 
    at Object.<anonymous> (/Users/khinester/Sandboxes/zeitgeist/Blade/server.js:5:35) 
    at Object.<anonymous> (/Users/khinester/Sandboxes/zeitgeist/Blade/server.js:21:4) 
    at Module._compile (module.js:456:26) 
    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 Function.Module.runMain (module.js:497:10) 
    at startup (node.js:119:16) 
    at node.js:901:3 
DEBUG: Program node server exited with code 8 

DEBUG: Starting child process with 'node server' 
00:55:26 - compiled src/social.coffee 

Я структурировали мое приложение следующим образом:

☺ tree -L 3 . 
. 
├── Cakefile 
├── README.md 
├── server.coffee 
├── src 
│   ├── config 
│   │   ├── config.coffee 
│   │   ├── errors.coffee 
│   │   ├── i18n.coffee 
│   │   ├── models.coffee 
│   │   ├── passport.coffee 
│   │   └── routes.coffee 
│   ├── controllers 
│   │   ├── api.coffee 
│   │   ├── index.coffee 
│   │   ├── login.coffee 
│   │   ├── map.coffee 
│   │   └── user.coffee 
│   ├── index.coffee 
│   ├── models 
│   │   └── user 
│   │    └── user.coffee 
│   └── utils 
│    ├── dbconnect.coffee 
│    ├── emailer.coffee 
│    ├── i18n.coffee 
│    ├── logger.coffee 
│    └── passport.coffee 
└── views 
    ├── 404.blade 
    ├── 500.blade 
    ├── footer.blade 
    ├── forms 
    │   ├── federated-form.blade 
    │   ├── login-form.blade 
    │   └── registration-form.blade 
    ├── header.blade 
    ├── index.blade 
    └── user 
     ├── create.blade 
     ├── login.blade 
     └── user.blade 

мой server.coffee выглядит следующим образом:

application = require("./.app/")() 
nowjs = require "now" 
port = process.env.PORT or process.env.VMC_APP_PORT or process.env.VCAP_APP_PORT or 3000 
server = application.listen(port) 
everyone = nowjs.initialize(server) 
console.log "Server running at http://127.0.0.1: "+ port + "\nPress CTRL-C to stop server." 

который компилирует:

// Generated by CoffeeScript 1.6.2 
(function() { 
    var application, everyone, nowjs, port, server; 

    application = require("./.app/")(); 

    nowjs = require("now"); 

    if (!process.env.NODE_ENV) { 
    process.env.NODE_ENV = "local"; 
    } 

    port = process.env.PORT || process.env.VMC_APP_PORT || process.env.VCAP_APP_PORT || 3000; 

    server = application.listen(port); 

    everyone = nowjs.initialize(server); 

    console.log("Server running at http://127.0.0.1: " + port + "\nPress CTRL-C to stop server."); 

}).call(this); 

и /app/index.coffee:

#Load external dependencies 
express = require("express") 
stylus = require("stylus") 
mongoose = require("mongoose") 
i18next = require "i18next" 

#Load local dependencies 
models = require("./config/models") 
i18n = require("./config/i18n") 
config = require("./config/config") 
routes = require("./config/routes") 

#Load database dependencies 
dbconnection = require "./utils/dbconnect" 

#Load logger 
logger = require "./utils/logger" 

# Initialize logger 
logger.configure() 
logCategory = "APP config" 

# Create Server 
app = express() 
logger.info "---- App server created ----", logCategory 

#Exports 
module.exports = -> 
    # Load Mongoose Models 
    models app 

    # Load i18next config 
    i18n app 
    # Init i18next 
    i18next.init(app.i18n) 
    i18next.registerAppHelper(app) 
    # Load Expressjs config 
    config app 

    # Load routes config 
    routes app 

    app 

logger.info "---- Modules loaded into namespace ----", logCategory 
# Connect to database 
dbconnection.init (result) -> 
    if result 
    logger.info "Database initialized", logCategory 

так, каждый раз, когда я запустить приложение, я получаю TypeError, но приложение работает!

Что мне не хватает и не понимаю здесь?

любой совет очень ценится.

ответ

0

У меня есть предположение - может быть, это какое-то условие гонки между составлением сценария кофе и запуском js?

В любом случае, если бы я был вами, я бы попытался изолировать проблему - открыть узел (или кофе) в интерактивном режиме - потребовать код приложения - можете ли вы назвать функцию? это функция? Объект? попробуйте использовать кофе для запуска вашего приложения вместо узла. вы получаете ту же ошибку?

еще одна вещь - вы сказали, что она находится ./app, но в вашем коде она находится ./.app - Я думаю, это не проблема, потому что произошла другая ошибка.

+0

весь мой код скомпилирован в .js и помещается в /.app при запуске непосредственно из консоли узла, я не получаю эту ошибку, вот вывод http://pastie.org/7925572 попытается используйте кофе непосредственно для запуска приложения. – khinester

+0

Да, это функция. '> Application = require (" ./. App/"); [Функция] > ' – khinester

+0

Отделить запрос от вызова функции. Попробуйте записать то, что было возвращено из require(). Это объект? Каковы его ключи? используйте Object.keys() – surui

Смежные вопросы