Javascript 续集无效值符号(ne)
我在Express Node.js服务器上运行以下两个文件: home.jsJavascript 续集无效值符号(ne),javascript,node.js,postgresql,express,sequelize.js,Javascript,Node.js,Postgresql,Express,Sequelize.js,我在Express Node.js服务器上运行以下两个文件: home.js var express = require('express') var sequelize = require('sequelize') var db = require('../../shared/db.js') var op = sequelize.Op var router = express.Router() router.get('/home', function(req, res, next) {
var express = require('express')
var sequelize = require('sequelize')
var db = require('../../shared/db.js')
var op = sequelize.Op
var router = express.Router()
router.get('/home', function(req, res, next) {
db.shared.person.findAll({
where: {
email: {
[op.ne]: null
}
},
order: ['id']
}).then(function (person) {
res.locals = {
person: person
}
res.render('home')
})
})
module.exports = router
db.js
当我尝试运行此查询时,我得到一个错误,声明未处理的拒绝错误:无效值{[Symbol(ne)]:null}
我做错了什么?我可以使用$ne
甚至ne
很好,但它们已被弃用,使用起来并不完全安全。此外,这不仅仅是[op.ne]
-当我使用任何类似这样的条件时,我会遇到这个错误
我把这一切都建立在这个基础上,所以我不确定我到底做错了什么。
db.js
和home.js中的Sequelize实例是不同的,这是因为节点根据它的路径缓存一个必需的模块
要解决这个问题,您可以在db.js
module.exports = {
shared: {
person: db.define('person', {
id: {
type: sequelize.INTEGER,
primaryKey: true
},
name: sequelize.STRING,
email: sequelize.INTEGER
}, { freezeTableName: true , timestamps: false, schema: 'shared' }),
},
db: db
}
然后最后使用该共享实例中的运算符执行查询
var express = require('express')
var sequelize = require('sequelize')
var db = require('../../shared/db.js')
var op = db.db.Op;
var router = express.Router()
router.get('/home', function(req, res, next) {
db.shared.person.findAll({
where: {
email: {
[op.ne]: null
}
},
order: ['id']
}).then(function (person) {
res.locals = {
person: person
}
res.render('home')
})
})
module.exports = router
还有一件事,如果您正确地清理用户输入,字符串操作符是完全安全的。如果要将未清理的用户输入传递给Sequelize方法,则只需要使用安全运算符
关于这个话题的更多信息
未处理的拒绝错误:如果未设置如下字符串别名,也可能出现无效值:
const Op=Sequelize.Op;
常量运算符别名={
$eq:Op.eq,
$ne:Op.ne,
...
$any:Op.any,
$all:Op.all,
$values:Op.values,
$col:Op.col
};
const connection=new Sequelize(db,user,pass,{operatorsalias})代码>这非常有用,非常感谢!但有一个问题:如何使用Node.js/Express清理用户输入?
var express = require('express')
var sequelize = require('sequelize')
var db = require('../../shared/db.js')
var op = db.db.Op;
var router = express.Router()
router.get('/home', function(req, res, next) {
db.shared.person.findAll({
where: {
email: {
[op.ne]: null
}
},
order: ['id']
}).then(function (person) {
res.locals = {
person: person
}
res.render('home')
})
})
module.exports = router