gpt4 book ai didi

node.js - 如何在 nodejs 中设置 sequelize orm

转载 作者:行者123 更新时间:2023-12-03 22:42:22 34 4
gpt4 key购买 nike

在模型中:

var Sequelize = require('sequelize');
var sequelize_config = {
"username": process.env.DB_USERNAME || "root",
"password": process.env.DB_PASSWORD || "",
"pool": 200,
"database": "faasos_platform",
"host": "localhost",
"dialect": "mysql",
"dialectOptions": {
"multipleStatements": true
},
"logging": true,
"define": {
"timestamps": true,
"underscored": true
}
}

var sequeliz = new Sequelize(sequelize_config.database, sequelize_config.username, sequelize_config.password, sequelize_config);

module.exports = function (sequeliz, DataTypes) {
var auth = sequeliz.define("auth", {
device_id: {
type: DataTypes.STRING(50),
validate: {
notEmpty: true
}
},
customer_id: {
type: DataTypes.INTEGER,
validate: {
notEmpty: true
}
},
created_at: {
type: DataTypes.DATE,
validate: {
notEmpty: true
}
},
access_token: {
type: DataTypes.STRING(455),
validate: {
notEmpty: true
}
},
ip_address: {
type: DataTypes.STRING(20),
validate: {
notEmpty: true
}
},
is_active: {
type: DataTypes.INTEGER,
validate: {
notEmpty: true
}
}
}, {
classMethods: {
associate: function (models) {},
verify_user: function (req, callback) {
var d = new Date();
var sql = " Select customer_id From auth WHERE access_token =:access_token && is_active = '1' ";
sequelize.query(sql, {
replacements: {
access_token: req.access_token
},
raw: true
}).spread(function (data, metadata) {
callback(null, data);
}).catch(function (err) {
callback(err, null);
});
},
revoke_access_token: function (req, callback) {
var sql = "UPDATE auth SET is_active = 0 " +
"WHERE customer_id = :customer_id";
sequelize.query(sql, {
replacements: {
customer_id: req.id
},
raw: true
}).spread(function (data, metadata) {
callback(null, data);
}).catch(function (err) {
callback(err, null);
});
},
save_access_token_details: function (req, callback) {
var d = new Date();
var sql = "INSERT INTO auth (device_id, customer_id, created_at, access_token, ip_address, is_active)" +
"VALUES (:device_id, :cust_id, :created_at, :access_token, :ip_add, 1) ";
sequelize.query(sql, {
replacements: {
device_id: req.device_code ,
cust_id: req.id ,
created_at: d,
access_token: req.access_token,
ip_add: req.ip_add
},
raw: true
}).spread(function (data, metadata) {
callback(null, data);
}).catch(function (err) {
callback(err, null);
});;
}
},
tableName: 'auth',
timestamps: true,
underscored: true
});
return auth;
};

在我的 Controller 中:
var models = require('../models/auth.js'); // the above model is saved in file auth.js

models.auth.verify_user(access_token, function (err, data) {
if (err) {
res.status(401).send({
'err': 'Unauthorized!'
});
}
if (data) {
models.revoke_access_token(user, function (err, data) {
if (err) {
res.status(401).send({
'err': 'Unauthorized!'
});
}
});
}
models.save_access_token_details(payload, function (err, data) {
if (err) {
res.status(401).send({
'err': 'Unauthorized!'
});
} else {
console.log(err, data);
res.send(data);
}
});
});

但每次它存在时都会出现错误::

TypeError: Cannot call method 'verify_user' of undefined at SignStream. (/home/salim/Documents/proj/platform/oAuth/controllers/validate.js:25:19) at SignStream.EventEmitter.emit (events.js:95:17) at SignStream.sign (/home/salim/Documents/proj/platform/oAuth/node_modules/jsonwebtoken/node_modules/jws/lib/sign-stream.js:54:8) at SignStream. (/home/salim/Documents/proj/platform/oAuth/node_modules/jsonwebtoken/node_modules/jws/lib/sign-stream.js:37:12) at DataStream.g (events.js:180:16) at DataStream.EventEmitter.emit (events.js:92:17) at DataStream. (/home/salim/Documents/proj/platform/oAuth/node_modules/jsonwebtoken/node_modules/jws/lib/data-stream.js:20:12) at process._tickCallback (node.js:415:13) stream.js:94 throw er; // Unhandled stream error in pipe. ^ Error: read ECONNRESET at errnoException (net.js:901:11) at Pipe.onread (net.js:556:19)



请帮助我哪里出错了??为什么orm无法识别功能????

最佳答案

您的问题是 models.authundefined 初始化后 models 。由于 models.authundefined ,你不能调用它的函数,也不能使用它的成员。
authmodule.exports 内部的局部变量。即使你归还它,在它的范围之外你也不能使用它。

如果 require 调用 module.exports ,那么您的 modelsauth 是相同的对象,因为您返回了 auth ,因此 models.verify_user 存在于您的代码中。但是,我建议以下修复:

var models = {}; //creating an empty object which will hold the models
models.auth = require('../models/auth.js'); // the above model is saved in file auth.js

然后你就可以使用 models.auth 了。

关于node.js - 如何在 nodejs 中设置 sequelize orm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34721298/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com