我想使用一个类(名称为Paste
)与以下方法:Paste.create()
-在MongoDB中使用mongoose创建一个新记录。Paste.find()
-使用mongoose在MongoDB中查找记录
这是我的Paste.js:
const db = require("../models/schema");
class Paste {
constructor( id, content, title, description, language ) {
this.id = id;
this.content = content;
this.title = title;
this.description = description;
this.language = language;
}
create() {
db.create({
id: this.id,
content: this.content,
title: this.title,
description: this.description,
language: this.language
})
}
find(id) {
const r = db.findOne({ id: id });
if(r==undefined) return false;
return {
id: r.id,
content: r.content,
title: r.title,
description: r.description,
language: r.language
}
}
}
module.exports = Paste;
这是我用来使用这些方法的代码:(它在HTML按钮被点击时执行)
const { MONGO_URI } = require("../config.json");
const { generateKey } = await import('crypto');
const mongoose = require("mongoose");
const Paste = require("./classes/Paste");
mongoose.connect(MONGO_URI, {
useNewUrlParser: true,
useUnifiedTopology: true
})
registerPaste = () => {
try {
let title = null;
if(document.getElementById("pasteTitle").value > 20) {
title = document.getElementById("pasteTitle").value.slice(0, 40) + `...`
}
let id = null;
generateKey("aes", { length: 10 }, (err, key) => {
if (err) throw err;
id = key.export().toString("hex");
})
const p = new Paste(id, document.getElementById("pasteContent").value, document.getElementById("pasteTitle").value, document.getElementById("pasteDescrp").value, document.getElementById("pasteLang").value);
p.create();
window.location.replace(`${window.location.href}/${id}`);
}
catch {
console.error;
}
}
调用registerPaste()
函数的html代码:
<button class="btn no-animation btn-success font-p create-btn" onclick="registerPaste()">Create paste</button>
当按钮被点击时,它不会重定向到新创建的粘贴的URL…希望有人能帮忙!
更多细节:
- Node.JS版本:16.8.0
- 我使用expressjs来渲染静态HTML, CSS文件。
看起来您正在尝试将html前端连接到没有网络调用的快速后端。此外,您将前端和后端代码混合在一起,试图从节点服务器内访问DOM元素。您将需要使用某种ajax调用。Jquery (ajax)可以在这里工作,Axios https://www.npmjs.com/package/axios也可以。否则,点击将无法访问您的服务器。
你还需要设置路由。我建议花点时间看看快递文档。https://expressjs.com/en/starter/basic-routing.html,也许看一些快速服务器教程,以更好地了解如何连接前端和后端。