我目前正在编写一个 NodeJS 服务器,并尝试连接到我的 MongoDB 数据库,因此我使用
mongoose
。问题是,在数据库中成功创建条目后,我的服务器找不到它并认为存在错误。
这是我的“客户端”对象和我的数据库函数:
Client.js
import mongoose from 'mongoose';
const clientSchema = new mongoose.Schema({
hwid: {
type: String,
required: true,
unique: true,
},
ip: {
type: String,
required: true,
},
timestamp: {
type: Date,
default: Date.now,
},
publicKey: String,
privateKey: String,
bitcoinAddress: String,
});
const Client = mongoose.model('Client', clientSchema);
export default Client;
db.js
import mongoose from 'mongoose';
import Client from '../models/Client.js';
import { generateKeyPair } from 'crypto';
export const connectToDatabase = async (databaseURL) => {
try {
await mongoose.connect(databaseURL);
console.log(`[i] Connected to MongoDB at: ${databaseURL}`);
} catch (error) {
console.error('[!] Error connecting to MongoDB:', error.message);
process.exit(1);
}
};
export const disconnectFromDatabase = async () => {
try {
await mongoose.disconnect();
console.log('[i] Disconnected from MongoDB');
} catch (error) {
console.error('[!] Error disconnecting from MongoDB:', error.message);
}
};
export const generateRSAKeys = async () => {
return new Promise((resolve, reject) => {
generateKeyPair('rsa', {
modulusLength: 2048,
publicKeyEncoding: {
type: 'spki',
format: 'pem',
},
privateKeyEncoding: {
type: 'pkcs8',
format: 'pem',
},
}, (err, publicKey, privateKey) => {
if (err) {
reject(err);
} else {
resolve({ publicKey, privateKey });
}
});
});
};
export const createClient = async (hwid, ip) => {
try {
const existingClient = await Client.findOne({ hwid });
if (!existingClient) {
const { publicKey, privateKey } = await generateRSAKeys();
const newClient = new Client({
hwid,
ip,
publicKey,
privateKey,
});
await newClient.save();
console.log(`[+] New user created: ${hwid}`);
return true;
} else {
console.log(`[i] User already exists: ${hwid} aborting...`);
return false;
}
} catch (error) {
console.error('[!] Error in createClient:', error.message);
return false;
}
};
最后,这是我的测试脚本:
import { connectToDatabase, createClient, disconnectFromDatabase } from './utils/db.js';
const databaseURL = 'mongodb://127.0.0.1:27017/wbs_clients';
const testCreateClient = async () => {
try {
await connectToDatabase(databaseURL);
const result = await createClient('testHWID', '127.0.0.1');
if (result) {
const createdClient = await Client.findOne({ hwid: 'testHWID' });
console.log('[i] Client details:', createdClient);
} else {
console.log('[i] createClient failed');
}
} catch (error) {
console.error('[!] Error in testCreateClient:', error.message);
} finally {
await disconnectFromDatabase();
}
};
testCreateClient();
这是我第一次运行时得到的结果:
D:\WMP\Training\WBS-C2>node .\src\test.js
Debugger attached.
[i] Connected to MongoDB at: mongodb://127.0.0.1:27017/wbs_clients
[+] New user created: testHWID
[!] Error in testCreateClient: Client is not defined
[i] Disconnected from MongoDB
Waiting for the debugger to disconnect...
但是,我在
MongoDB Compass
上注意到“testHWID”客户端已创建。
你能帮我检索并显示数据库中存储的信息吗?
您需要将
Client
导入到测试脚本中。它可用于 createClient
函数,因为您将其导入到 db.js
中,但从未从该文件中导出。
import { connectToDatabase, createClient, disconnectFromDatabase } from './utils/db.js';
import Client from '../models/Client.js'; //< Add this
//...
//...