具有Express,Jade和Browserify的猫鼬-文档实例没有.save()函数

时间:2020-07-15 16:05:51

标签: javascript mongodb express mongoose pug

我有一个Express应用程序-用express-generator构建-仅包含一条相关路线。使用ES6语法;我正在使用Babel进行转送。

我在索引路径中使用Jade渲染了一个非常简单的UI:

routes / index.js

import express from 'express';

const router = express.Router();
const locals = { title: 'Express' };

/* GET home page. */
router.get('/', function (req, res, next) {
    res.render('index', locals);
});

export default router;

在用户界面中,我有一个按钮和输入字段。单击按钮后,我想将一个简单的文档保存到本地MongoDB服务器实例:

views / index.jade

extends layout

block content
  script(src='./javascripts/index.js')
  script.
    var Visit = window.my_module.Visit;

    function submit() {
      var visit = new Visit();
      visit.dateOfVisit = new Date();
      visit.location = document.getElementById('locationInput').value;
    
      console.log(visit);

      visit.save(function(err, saved) {
          if (err) {
              console.log(err);
          } else {
              console.log('saved!: ', saved);
          }
      });
    }

  h1= title
  p Welcome to #{title}
  input(id='locationInput', type="text")
  button(onclick='submit()') GO

请注意index.js脚本正在导入。该脚本如下所示:

/public/javascripts/index.js

var visit = require('./Visit');

module.exports = { Visit: visit };

请注意,我们需要./Visit

/public/javascripts/Visit.js

const mongoose = require('mongoose');

const visitSchema = new mongoose.Schema({
    dateOfVisit: Date,
    location: String
});

module.exports = mongoose.model('Visit', visitSchema);

因此/public/javascripts/index.js或多或少是“阻塞” /包装,访问模块导出。我发现这是必要的,因为我需要Browserify来解析CommonJS require,这样才能以对浏览器友好(UMD?)的方式构造一个包。

我还发现,要在Jade渲染的标记中利用Visit,我需要在名为Visit的模块中公开my_module-在全局window对象上。这是执行此操作的相关Browserify脚本,在本地开发时会在文件更改时触发:

"browserify": "browserify server/public/javascripts/index.js -s my_module > dist-server/public/javascripts/index.js",

submit()处理程序触发时,我看到以下错误:

(索引):10未捕获的TypeError:visit.save不是函数 提交时((索引):10) 在HTMLButtonElement.onclick((index :: 18)

为了提供太多信息并淹没最相关的文章,我敢肯定其他相关的文章正在按预期工作;我的MongoDB连接正在工作,因为在呈现HTML之前我尝试保存在路由“层”(.save())中时,发现/routes/index.js正在按预期持久保存文档。

我可能会缺少什么? TIA!

0 个答案:

没有答案