无法读取 Node 和 Sequelize 中未定义的属性“findOne”

Asa*_*har 1 express sequelize.js

这是我的 admin_pages.js 文件,我已经完成了迁移和模型,但出现此错误。

类型错误:无法读取 C:\users\gaffer\desktop\gaffercart\routes\admin_pages.js:80:21 at Layer.handle [as handle_request] (C:\users\gaffer\desktop\gaffercart) 的未定义属性“findOne” \node_modules\express\lib\router\layer.js:95:5) 在下一个 (C:\users\gaffer\desktop\gaffercart\node_modules\express\lib\router\route.js:137:13) 在 Route。在 Layer.handle [as handle_request] (C:\users\gaffer\desktop\gaffercart\node_modules\express\lib\router\route.js:112:3) (C:\users\gaffer\desktop\gaffercart\node_modules\express\lib\router\route.js:112:3) \express\lib\router\layer.js:95:5) 在 C:\users\gaffer\desktop\gaffercart\node_modules\express\lib\router\index.js:281:22 在 Function.process_params (C:\ users\gaffer\desktop\gaffercart\node_modules\express\lib\router\index.js:335:12) 在下一个 (C:\users\gaffer\desktop\gaffercart\node_modules\express\lib\router\index.js:275:10) 在 Function.handle (C:\users\gaffer\desktop\gaffercart\node_modules\express\lib\router\index .js:174:3) 在路由器 (C:\users\gaffer\desktop\gaffercart\node_modules\express\lib\router\index.js:47:12) 在 Layer.handle [as handle_request] (C:\users \gaffer\desktop\gaffercart\node_modules\express\lib\router\layer.js:95:5) at trim_prefix (C:\users\gaffer\desktop\gaffercart\node_modules\express\lib\router\index.js:317 :13) 在 C:\users\gaffer\desktop\gaffercart\node_modules\express\lib\router\index.js:284:7 在 Function.process_params (C:\users\gaffer\desktop\gaffercart\node_modules\express\ lib\router\index.js:335:12) 在下一个 (C:\users\gaffer\desktop\gaffercart\node_modules\express\lib\router\index.js:275:10) 在 C:\users\gaffer\desktop\gaffercart\index.js:70:3 at Layer.handle [as handle_request] (C:\users\gaffer\desktop\gaffercart\node_modules\express\lib\router\layer.js:95: 5) 在 trim_prefix (C:\users\gaffer\desktop\gaffercart\node_modules\express\lib\router\index.js:317:13) 在 C:\users\gaffer\desktop\gaffercart\node_modules\express\lib\ router\index.js:284:7 at Function.process_params (C:\users\gaffer\desktop\gaffercart\node_modules\express\lib\router\index.js:335:12) 在下一个 (C:\users\gaffer \desktop\gaffercart\node_modules\express\lib\router\index.js:275:10) 在 C:\users\gaffer\desktop\gaffercart\node_modules\connect-flash\lib\flash.js:21:5\users\gaffer\desktop\gaffercart\node_modules\express\lib\router\index.js:317:13) 在 C:\users\gaffer\desktop\gaffercart\node_modules\express\lib\router\index.js:284 :7 在 Function.process_params (C:\users\gaffer\desktop\gaffercart\node_modules\express\lib\router\index.js:335:12) 在下一个 (C:\users\gaffer\desktop\gaffercart\node_modules\ express\lib\router\index.js:275:10) 在 C:\users\gaffer\desktop\gaffercart\node_modules\connect-flash\lib\flash.js:21:5\users\gaffer\desktop\gaffercart\node_modules\express\lib\router\index.js:317:13) 在 C:\users\gaffer\desktop\gaffercart\node_modules\express\lib\router\index.js:284 :7 在 Function.process_params (C:\users\gaffer\desktop\gaffercart\node_modules\express\lib\router\index.js:335:12) 在下一个 (C:\users\gaffer\desktop\gaffercart\node_modules\ express\lib\router\index.js:275:10) 在 C:\users\gaffer\desktop\gaffercart\node_modules\connect-flash\lib\flash.js:21:510) 在 C:\users\gaffer\desktop\gaffercart\node_modules\connect-flash\lib\flash.js:21:510) 在 C:\users\gaffer\desktop\gaffercart\node_modules\connect-flash\lib\flash.js:21:5

var express=require('express');
var router=express.Router();
var expressValidator = require('express-validator');
var bodyParser=require('body-parser');
var models=require('../models');

// var mysql=require('mysql');
// var Sequelize=require('sequelize');
// var DataTypes=Sequelize.DataTypes;
// var sequelize = exports.sequelize = module.parent.exports.sequelize;
// let sequelize=new Sequelize();

//Get Page model
const Page = require('../models/page');

/*
* GET PAGES INDEX its correct but commiting it
*/

 router.get('/',function(req,res){
 //  Page.find({}).sort({sorting: 1}).exec(function(err,pages){
    res.render('admin/pages',{ 
      //pages:pages
    });
   });
 //});
//  router.get('/admin/dashboard',function(req,res){
//    res.render('admin/dashboard');
//  });


/*
** GET ADD PAGE
*/
 router.get('/add-page',function(req,res){
   var title="";
   var slug="";
   var content="";


   res.render('admin/add_page',{
      title:title,
      slug:slug,
      content:content

   });

 });

//POST ADD page
 router.post('/add-page',function(req,res){
  //  console.log("alsdjlajsi")

  req.checkBody('title','Title must have a body.').notEmpty();
  req.checkBody('content','Content must have a body.').notEmpty();

  var title = req.body.title;
  var slug = req.body.slug.replace(/\s+/g, '-').toLowerCase();
  if(slug == " ")  
  {
    slug = title.replace(/\s+/g, '-').toLowerCase();
  }
  var content = req.body.content;
  var errors = req.validationErrors();

  //If there are Errors then define it on the same page
  if(errors){
    res.render('admin/add_page',{
      errors:errors,
      title:title,
      slug:slug,
      content:content
    });
  }
  /*
  * Have use Pages
  */
      else{

        models.Page.findOne({slug:slug}, function(err, page){

        if(page){
          req.flash('danger','Page slug Already Exist,');
          res.render('admin/add_page',{

            title:title,
            slug:slug,
            content:content
          });
        }
        else{
            var page = new Page({
              title:title,
              slug:slug,
              content:content,
              sorting:100
            });
            page.save(function(err){
              if(err) return console.log(err);

              req.flash('success','Page Added Successfully!!');
              res.redirect('/admin/pages');
            });
        }
      });

  }

});
//Exports
module.exports=router;
Run Code Online (Sandbox Code Playgroud)

这是我的页面模型

'use strict';
// var Sequelize=require('sequelize');

module.exports = (sequelize, DataTypes) => {
  var page = sequelize.define('page', {
    title: DataTypes.STRING,
    slug: DataTypes.STRING,
    content: DataTypes.STRING,
    sorting:DataTypes.INTEGER
  }, {});
  page.associate = function(models) {
    // associations can be defined here
  };
  return page;
};
Run Code Online (Sandbox Code Playgroud)

vap*_*aid 5

您已将 Page 模型定义为'page'(小写):

var page = sequelize.define('page', {...})
Run Code Online (Sandbox Code Playgroud)

但是将其用作:

 models.Page.findOne(...) // uppercase
Run Code Online (Sandbox Code Playgroud)

使用models.page或更改您的模型定义为大写:

var page = sequelize.define('Page', {...}) // uppercase
Run Code Online (Sandbox Code Playgroud)

也改变这个:

//Get Page model
const Page = require('../models/page');
Run Code Online (Sandbox Code Playgroud)

对此:

const Page = require('../models').Page // or .page if you keep your definition lowercase
Run Code Online (Sandbox Code Playgroud)

findOne不带函数回调,你必须用属性where来搜索slug。使用以下内容:

else { 
  models.Page.findOne({ 
    where: { slug }  // destructuring
  })
  .then((page) => {
    // work with the page instance
  })
  .catch((err) => {
    // error case
  })

}
Run Code Online (Sandbox Code Playgroud)

page.save()

page.save()
  .then(() => {
    req.flash('success','Page Added Successfully!!');
    res.redirect('/admin/pages');
  })
  .catch((err) => {
    // handle error
  })
Run Code Online (Sandbox Code Playgroud)