【问题标题】:Getting error when creating simple PUT request using Sequelize.js使用 Sequelize.js 创建简单 PUT 请求时出错
【发布时间】:2015-03-04 10:14:49
【问题描述】:

我正在尝试学习 sequelize.js,但我收到了更新方法的 TypeError:

TypeError: 无法读取未定义的属性“参数”

我正在尝试获取路线的参数并更改它的值。我正在尝试获取用户名并更改其用户名和密码。这是我的代码:

module.exports = function (sequelize) {
    var model = require("../models/employer_model")(sequelize);
    var Employer = model.Employer;
    return {
        create: function (req, res) {
            if (req.body.username && req.body.password != null) {
                var newEmployer = {
                    username: req.body.username,
                    password: req.body.password
                }

            Employer.create(newEmployer).success(function () {
                res.send(200);
                res.json(req.dataValues);
            });} else {
                res.send(406);
            }
        },
        get: function (req, res) {
            Employer.findAll().success(function (employers) {
                res.send(employers);                
            });
        },
        update: function (req, res) {
            Employer.req.params.id = req.body;
            Employer.save().success(function (employers){
                res.send(200);
                res.json(req.dataValues);
            });
        }
    };
};

这里是 server.js

// app dependencies
var express = require("express");
var Sequelize = require("sequelize");
var bodyParser = require('body-parser');
var morgan = require('morgan');
var app = express();
var models = require("./models"); 

//sequalize initialization
var sequelize = new Sequelize("postgres://rahul:jobletics@localhost:5432/jobletics");
var employerRoute = require("./routes/employer_route")(sequelize);

//middleware
app.use(bodyParser());
app.use(morgan('dev'));

models.sequelize.sync().success(function (err) {
    console.log('Express server listening on port 5000');
    app.get("/employer", employerRoute.get);
    app.post("/employer", employerRoute.create);
    app.put("/employer/:id", employerRoute.update);
    app.listen(5000);
});

有什么想法吗?

【问题讨论】:

  • 可能Employer.req 未定义。
  • 那么用户名应该是什么?
  • 请显示你的 app.js(where express init)
  • 请看我更新了

标签: javascript node.js express sequelize.js


【解决方案1】:

据我所知,您正在尝试设置模型的 params 并保存实例。您应该首先获取要更新/保存的实例。

For updating instance.

如果你想构建一个实例并且他们保存它,你也可以examples。

希望这会有所帮助。

【讨论】:

  • 我的意思是,“Employer.req.params.id = req.body”您正在更改表格的模型,而不是获取实例并保存它。雇主.req。没有参数,只有该表的一个实例。您可以使用(构建或创建)创建一个新实例,或者您可以使用 find 或 findall 获取到数据库
  • 所以你是说首先在更新方法中创建一个雇主实例,然后使用该实例到相同的新参数?但是该实例将如何引用正在更改/更新的对象。
  • 我假设您已经定义了模型,例如: var User = sequelize.define('User', { username: Sequelize.STRING,birthday: Sequelize.DATE });我正在谈论的实例代表您在数据库中的表中的一行。要更改此行,您需要从数据库中获取它,这将是您的实例,并且要再次保存到数据库,您必须调用保存或更新,您可以在 sequelize.readthedocs.org/en/latest/docs/instances/… 中看到
  • 是的,这是我的模型,我试试你所说的“使用严格”; var Sequelize = require('sequelize'); module.exports = function (sequelize) { var Employer = sequelize.define("employer", { username: { type: Sequelize.STRING, validate: { notNull: true } }, password: { type: Sequelize.STRING, validate: { notNull: true } } });返回{雇主:雇主}; };
  • Sequelizejs 文档有几个例子,看看他们。它可能会为您省去一些麻烦
【解决方案2】:
Employer.req.params.id = req.body;

我的猜测是 Employer.req 在此处未定义

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    • 1970-01-01
    • 2021-05-02
    • 2014-12-14
    相关资源
    最近更新 更多