【问题标题】:How do I Build A .json Endpoint with a Sequelize Query?如何使用 Sequelize 查询构建 .json 端点?
【发布时间】:2016-03-04 10:53:23
【问题描述】:

一个半星期以来,我一直在努力解决这个问题,我想知道如何从 Sequelize ORM 的查询中获取一个 .json 端点。目前它会记录一个 404 错误“GET /api/users 404 3ms”。您可能听说过 Sequelize 的文档非常有限,我在教程之后一直在搜索 github 存储库,但到目前为止还没有任何工作,所以我想我会在这里问。

一小段摘录(https://github.com/NatuMyers/A.M.E.N.SQL-Stack 上的代码):

// VARS -----------------------------
var express        = require('express')
  , bodyParser     = require('body-parser')
  , errorHandler   = require('errorhandler')
  , methodOverride = require('method-override')
  , morgan         = require('morgan')
  , http           = require('http')
  , path           = require('path')
  , db             = require('./models')

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

// all environments
app.set('port', process.env.PORT || 3000)
app.set('views', __dirname + '/views')
app.set('view engine', 'jade')
app.use(morgan('dev'))
app.use(bodyParser())
app.use(methodOverride())
app.use(express.static(path.join(__dirname, 'public')))

// SEQUELIZE MODELS 
var userVar     = require('./models/user');

// dev only
 if ('development' === app.get('env')) {
      app.use(errorHandler())
}

// Make db, and make it listen 
db
.sequelize
.sync()
.complete(function(err) {
    if (err) {
    throw err
    } else {
              http.createServer(app).listen(app.get('port'), function() {
              console.log('Express server listening on port ' + app.get('port'))
            })
    }
    })

// HTTP GET endpoints
module.exports = function() {

  router.get('/', function(req, res, next){
      res.json({ message: 'This works at localhost:3000/api but getting a list of users is a pain :(' });
  });

  // question
  router.get('/users', function(req, res, next){
      res.json(/* I need to make sequelize send a part of the User db here. */);
  });

return router;
};

【问题讨论】:

    标签: rest express sequelize.js


    【解决方案1】:

    我继续使用 Epilogue.js(以普通方式)。

    我在 Sequelize 中添加了 INLINE 模型(我浪费了大量时间尝试导入模型),然后添加任何中间件并根据以下语法创建 restful api。

    // 1. ADD SEQUELIZE MODELS ---- ---- ---- ----
    var database = new Sequelize('raptroopdb', 'root', 'strongpassword');
    
    var Employee = database.define('Employee', {
        name: Sequelize.STRING,
        hireDate: Sequelize.DATE
    });
    
    // Add Account model with foreign key constraint to Employee
    var Account = database.define('Account', {
        name: Sequelize.STRING,
        managerId: {
            type: Sequelize.INTEGER,
    
            references: {
                // This is a reference to model Employee
                model: Employee,
    
                // This is the column name of the referenced model
                key: 'id',
    
            }
        }
    });
    
    // 2. ROOM FOR MIDDLEWARE to use for all requests
    router.use(function(req, res, next) {
        // do logging
        console.log('In server.js');
    
        // make sure we go to the next routes and don't stop here
        next();
    });
    
    // Initialize epilogue
    epilogue.initialize({
        app: app,
        sequelize: database
    });
    
    app.use(express.static(__dirname + "/public"));
    app.get('/', function(req, res) {
        res.redirect('/public/index.html');
    });
    
    
    
    // 3. Create REST resource
    var employeeResource = epilogue.resource({
        model: Employee,
        endpoints: ['/api/employees', '/api/employees/:id']
    });
    
    var acctResource = epilogue.resource({
        model: Account,
        endpoints: ['/api/accounts', '/api/accounts/:id']
    });
    
    // Create database and listen
    database
        .sync({
            force: false
        })
        .then(function() {
            app.listen(port, function() {
                console.log('listening at %s', port);
            });
        });
    

    【讨论】:

      猜你喜欢
      • 2017-05-10
      • 2019-11-09
      • 1970-01-01
      • 2019-12-21
      • 1970-01-01
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多