我有一个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!