【发布时间】:2017-03-29 08:10:05
【问题描述】:
我尝试使用 Express 4.14.0 (orm 3.1.0 / mySQL) 在 app.js 中设置 JSON API:
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;
我使用 datamodel.js 来设置 orm:
var express = require('express');
var orm = require('orm');
var app = express();
app.use(orm.express("mysql://onserver:>2hZ[RpfCT~!xx@localhost/onserver", {
define: function (db, models, next) {
models.person = db.define("person", {
name : String,
surname : String,
} );
next();
}
}));
还有 api.js 用于实际的 api:
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,我收到了:
型号:未定义
我需要模型对象来检索数据,但它是未定义的。为什么?
【问题讨论】:
-
您正在 datamodel.js 中定义新应用程序。您只需在应用程序中执行一次
var app = express();并将app变量传递给其他模块,以便它们都引用同一个实例。 -
@Molda 它有效。你想写答案吗?我只是做“var app = require('../app');”而不是“var app = express();”在文件 2 和 3 中,移动“var app = express();”在文件 1 中两行,它在数据模型模块之前加载。
-
我将用通常如何完成的示例添加答案。
标签: mysql node.js express orm routes