我在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) {
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
var sequelize = require('sequelize')
var config = {
host: 'localhost',
port: 5432,
username: '...',
password: '...',
database: 'postgres',
dialect: 'postgres',
operatorsAliases: false
}
var db = new sequelize(config)
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' }),
}
}
当我尝试运行此查询时,收到声明Unhandled rejection Error: Invalid value { [Symbol(ne)]: null }
我做错了什么?我可以使用$ne
甚至ne
,但它们已被弃用,并且使用起来并不完全安全。此外,它不只是[op.ne]
- 当我使用这样的任何条件时,我会收到此错误。
我基于此guide,所以我不确定我在这里做错了什么。
答案 0 :(得分:1)
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方法,则只需使用安全运算符。
有关此主题的更多信息
答案 1 :(得分:0)
1
:
mov ax,1
但是,最好从代码中删除基于字符串的别名并使用[Op.ne],例如Sequlize计划很快弃用它们。