【问题标题】:Mean stack :ReferenceError:平均堆栈:ReferenceError:
【发布时间】:2018-11-29 05:49:01
【问题描述】:

我创建了一个名为 jobslist.js 的架构

 var mongoose = require('mongoose');
var Schema = mongoose.Schema;


var jobListSchema = new Schema({
    companyName: String,
    jobtitle: String,
    location: String
});

var joblist = mongoose.model('jobList', jobListSchema);

module.exports = joblist;

这是我的路由文件 user.js

    const jobList = require('../models/joblist');
        router.post('/appliedjobs', function(req,res) {
  console.log('posting applied jobs list');
  var appliedjob = new jobList();
      appliedjob.companyName = req.body.companyName;
      appliedjob.jobtitle =  req.body.jobtitle;
      appliedjob.location = req.body.location;
  console.log(appliedjob);
  appliedjob.save(function(err,joblist) {
    if(err) {
      console.log(err);
    } else {
      res.json({msg: 'job is saved'});
    }
  });
});

//get applied job list
router.get('/appliedjobs',function(req,res ) {
  console.log('getting applied jobs');
  appliedjob.find(function(err, appjobs) {
    if (err) {
      console.log('unable to get jobs '+ err);
    } else {
      console.log('getting list');
      res.json(appjobs);
    }
  });
});

我遇到了错误

获取作业 获得应聘工作

ReferenceError: 应用作业未定义 在 D:\product\project-1\routes\users.js:132:3 在 Layer.handle [as handle_request] (D:\product\project-1\node_modules\express\lib\router\layer.js:95:5) 在下一个 (D:\product\project-1\node_modules\express\lib\router\route.js:137:13) 在 Route.dispatch (D:\product\project-1\node_modules\express\lib\router\route.js:112:3) 在 Layer.handle [as handle_request] (D:\product\project-1\node_modules\express\lib\router\layer.js:95:5) 在 D:\product\project-1\node_modules\express\lib\router\index.js:281:22 在 Function.process_params (D:\product\project-1\node_modules\express\lib\router\index.js:335:12) 在下一个(D:\product\project-1\node_modules\express\lib\router\index.js:275:10) 在 D:\product\project-1\routes\users.js:15:3 在 Layer.handle [as handle_request] (D:\product\project-1\node_modules\express\lib\router\layer.js:95:5) 在 trim_prefix (D:\product\project-1\node_modules\express\lib\router\index.js:317:13) 在 D:\product\project-1\node_modules\express\lib\router\index.js:284:7 在 Function.process_params (D:\product\project-1\node_modules\express\lib\router\index.js:335:12) 在下一个(D:\product\project-1\node_modules\express\lib\router\index.js:275:10) 在 Function.handle (D:\product\project-1\node_modules\express\lib\router\index.js:174:3) 在路由器 (D:\product\project-1\node_modules\express\lib\router\index.js:47:12)

我已签入我的数据库(MongoDB),尚未生成集合。

【问题讨论】:

  • 你也在混合 ES2015 和 ES5。声明所有 var -> const 或不使用 const

标签: javascript node.js express mean-stack


【解决方案1】:

你应该修改joblist.js文件的最后一行。

以下是猫鼬模型的正确导出。

module.exports = { jobList : mongoose.model('jobList', jobListSchema) };

并在导入时更改第一行

var JobList = require('../models/jobslist').jobList;

【讨论】:

    【解决方案2】:

    创建模型时放在下面的行

    var joblist = mongoose.model('jobList', jobListSchema, 'jobList');
    
    module.exports = joblist;
    

    【讨论】:

    • 您好,您在从表中获取数据或向表中插入数据时是否出错?
    • 两个时代。
    【解决方案3】:

    在函数作用域外声明变量applyjob

    【讨论】:

      【解决方案4】:

      appliedjob 作业在router.post/appliedjobs 期间定义,在其回调中并在函数完成后立即死亡,因此它不再存在于router.get

      如果你想让它持久化,你需要在函数外声明appliedjob。这是新的 user.js 文件:

      const jobList = require('../models/joblist');
      let appliedjob; // now it's available to both functions below
      //post joblist
      router.post('/appliedjobs', function(req,res) {
        console.log('posting applied jobs list');
        appliedjob = new jobList({
           companyName : req.body.companyName,
           jobtitle :  req.body.jobtitle,
           location : req.body.location
        });
        console.log(appliedjob);
        appliedjob.save(function(err,joblist) {
          if(err) {
            console.log(err);
          } else {
            res.json({msg: 'job is saved'});
          }
        });
      });
      
      //get applied job list
      router.get('/appliedjobs',function(req,res ) {
        console.log('getting applied jobs');
        appliedjob.find(function(err, appjobs) {
          if (err) {
            console.log('unable to get jobs '+ err);
          } else {
            console.log('getting list');
            res.json(appjobs);
          }
        });
      });
      

      但是!

      这种方式appliedjob 只会是您所期望的如果post 请求发生之前 get 请求。

      我建议你重新考虑一下策略,这样如果get请求先发生,你就可以恢复。

      【讨论】:

      • ReferenceError: appliedjobs is not defined 这是我得到的错误
      • appliedjob 还是appliedjobs?
      • ReferenceError: 应用作业未定义。我已经复制粘贴了你的代码。
      • 你读过大粗体但是吗?让我把它变大。完成
      • 是的,我尝试将数据通过邮递员传递为 { "companyName": "apple", "jobtitle": "systemadmin", "location": "torinto,canada" } 但我m 出现 TypeError 错误:无法读取属性 'companyName'未定义的
      【解决方案5】:

      应该使用架构jobList 而不是架构实例appliedjob

      //get applied job list
      router.get('/appliedjobs',function(req,res ) {
        console.log('getting applied jobs');
      
          jobList.find(function(err, appjobs) {     //find by jobList schema
       // appliedjob.find(function(err, appjobs) { 
      
          if (err) {
            console.log('unable to get jobs '+ err);
          } else {
            console.log('getting list');
            res.json(appjobs);
          }
        });
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多