2016-11-15 65 views
0

我尝试设置与快速4.14.0(ORM 3.1.0/MySQL的)在app.js一个JSON API,我有:访问ORM数据

var express = require('express'); 
var path = require('path'); 
var bodyParser = require('body-parser'); 
var data = require('./model/datamodel'); 
var api = require('./routes/api'); 
var app = express(); 

app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(express.static(path.join(__dirname, 'public'))); 
app.use('/', api); 

module.exports = app;     

我用

var express = require('express'); 
var orm = require('orm'); 
var app = express(); 

app.use(orm.express("mysql://onserver:>2hZ[[email protected]/onserver", { 
    define: function (db, models, next) { 
     models.person = db.define("person", { 
      name  : String, 
      surname : String, 
     }); 

     next(); 
    } 
})); 

而且api.js为实际的API:用于设置ORM datamodel.js

var express = require('express'); 
var router = express.Router(); 
var app = express();  

router.get('/', function(req, res, next) { 
    res.json({ message: 'hoorayDATABASE: undefined! welcome to our api!' }); 
}); 

router.route("/main").post(function(req, res) { 
    console.log("MODELS:", req.models); 
      // req.models is undefined 
      // I want to access req.models.person.find(...) 
}) 

module.exports = router; 

我打电话localhost:3000/main,我得到:

机型:未定义

我需要的模型对象来检索数据,但它是不确定的。为什么?

+0

你定义新datamodel.js中的应用程序。您只需在应用程序中执行'var app = express();',并将'app'变量传递给其他模块,以便它们都引用同一个实例。 – Molda

+0

@Molda它的作品。你想写一个答案?我只是做“var app = require('../ app');”而不是“var app = express();”在文件2和3中,并移动“var app = express();”在文件1中有两行,它在数据模型模块之前加载。 – Michael

+0

我会以通常如何完成的例子添加一个答案。 – Molda

回答

2

您正在定义datamodel.js中的新应用程序。您只需在应用程序中执行一次var app = express();并将应用变量传递给其他模块,以便它们都引用相同的实例。

这是怎么可以做到:

app.js

var express = require('express'); 
var path = require('path'); 
var bodyParser = require('body-parser'); 
var app = express(); 

app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(express.static(path.join(__dirname, 'public'))); 

// require the module and pass the `app` to the function it exports 
require('./model/datamodel')(app); 

app.use('/', require('./routes/api')); 

module.exports = app; 

datamodel.js

var orm = require('orm'); 

module.exports = function(app) { 
    app.use(orm.express("mysql://onserver:>2hZ[[email protected]/onserver", { 
     define: function (db, models, next) { 
      models.person = db.define("person", { 
       name  : String, 
       surname : String, 
      }); 

      next(); 
     } 
    })); 
} 

api.js

var express = require('express'); 
var router = express.Router(); 

router.get('/', function(req, res, next) { 
    res.json({ message: 'hoorayDATABASE: undefined! welcome to our api!' }); 
}); 

router.post('/main', function(req, res) { 
    console.log("MODELS:", req.models); 
}) 

module.exports = router;