【问题标题】:Accessing orm data in a node express post callback在节点快速发布回调中访问 orm 数据
【发布时间】: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


【解决方案1】:

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

这是可以做到的:

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[RpfCT~!xx@localhost/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; 

【讨论】:

    猜你喜欢
    • 2023-03-25
    • 1970-01-01
    • 2012-01-23
    • 1970-01-01
    • 2017-03-05
    • 2014-06-14
    • 2020-07-22
    • 1970-01-01
    • 2021-05-09
    相关资源
    最近更新 更多