Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 续集无效值符号(ne)_Javascript_Node.js_Postgresql_Express_Sequelize.js - Fatal编程技术网

Javascript 续集无效值符号(ne)

Javascript 续集无效值符号(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) {

我在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

当我尝试运行此查询时,我得到一个错误,声明
未处理的拒绝错误:无效值{[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