【问题标题】:Using the POST method with Sequelize在 Sequelize 中使用 POST 方法
【发布时间】:2016-11-02 10:23:59
【问题描述】:

我正在尝试调试一种情况,即我似乎无法根据用户在表单字段中输入的值为我的对象创建新记录。现在,我正忙于帖子无法识别.create 的对象创建方面。我是否也应该使用.create.build?我都尝试了,但发生了同样的错误。

TypeError: Ann.create is not a function
    at /Users/user/Desktop/Projects/node/nodeapp/app/controllers/appRoutes.js:13:20

appRoutes.js:

var express = require('express');
var appRoutes   = express.Router();
var Annotation = require('../models/annotation-model');

appRoutes.route('/') 

    .get(function(req, res){
        res.render('pages/activity-feed.hbs');
    })

    .post(function(req, res){

        var annotation = new Annotation.create({

            annotation_date: req.body.annotation-date,

        }).then(function(user){
            console.log(user.get({plain:true}))
        });



        annotation.save(function(err){
            if (err)
                res.send(err);
        });
    });

module.exports = appRoutes;

控制器索引(dbIndex.js):

var Sequelize = require('sequelize');
var sequelize = new Sequelize('test', 'admin', 'pwd', {
    host:'localhost',
    port:'3306',
    dialect: 'mysql'
});

sequelize
        .authenticate()
        .then(function(err) {
            if (!!err) {
                console.log('Unable to connect to the database:', err)
            } else {
                console.log('Connection has been established successfully.')
            }
        });

var db = {}

db.Annotation = sequelize.import(__dirname + "/annotation-model");

db.sequelize = sequelize;
db.Sequelize = Sequelize;

module.exports = db;

annotation-model.js:

module.exports = function(sequelize, DataTypes) {

var Annotation = sequelize.define('table', {
    annotation_id: {
        type: DataTypes.INTEGER,
        primaryKey: true
    },
    annotation_date: DataTypes.DATE,
}, {
    freezeTableName: true
});
    return Annotation;
}

POST 方法的表单(activity-feed.hbs):

<div class="row">
    <div class="col-md-6 col-md-offset-3" style="background-color:#ffe680;">
        <div class="annotation-form">
            <img class="media-object" src="http://placehold.it/80x80" alt="Generic placeholder image">
            <form action="/app" method="post">
                <label for="annotation-date">Annotation Date:</label>
                <br />
                <button>Create</button>
            </form>
        </div>
    </div>  
</div>

【问题讨论】:

  • req.body.annotation-date 应该是 req.body['annotation-date']

标签: node.js express sequelize.js


【解决方案1】:

你得到Ann.create is not a function的原因是因为你没有正确引用你的annotation-model.js:如果你遵循这个结构https://stackoverflow.com/a/33981210/880709一切都会好的,请参阅models/index.jsroutes/index.js加上阅读here

【讨论】:

  • 感谢您的回答,我同意您的回答会奏效,但我不想重组这么多文件并且您所指的文档已经过时。发布一个有效的答案。
  • 当前的 sequelize 文档已经过时了?
  • 您指向的是1.7.0 版本。 Sequelize 现在是基于 github 更改日志的版本 3.14.2
【解决方案2】:

这个问题的解决方案有两个部分。这两个部分都可以在appRoutes.js 文件中找到。

  1. var models 应该指向 dbIndex.js 文件,而不是模型定义的位置 (annotation-model.js)。 var models = require('../models/dbIndex);

  2. 您必须在dbIndex 中指定对象,以便我们可以使用.create 方法。这意味着models.Annotation.create()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-13
    • 2013-10-26
    • 2021-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-23
    • 1970-01-01
    相关资源
    最近更新 更多