使用节点我在创建 2 条路由时遇到了麻烦。 有时 1 个有效,而另一个则无效。有时另一个有效,而第一个无效。有时两者都不起作用。 浏览器只是旋转并超时。 我没有对它们进行任何更改。
我的路线有问题
/viewRecords/bne & /viewRecords/ssc
/ & /viewRecords 工作正常。
这是我创建的路线的当前版本。 我也做了不同的路线,结果相同。 例如:router.get('/bne') & router.get('/ssc')
服务器.js
const express = require('express');
const app = express();
const Datastore = require('nedb');
const expressLayouts = require('express-ejs-layouts');
const bneDB = new Datastore('databases/BNE.db');
const sscDB = new Datastore('databases/SSC.db');
bneDB.loadDatabase();
sscDB.loadDatabase();
const port = process.env.PORT || 3000;
app.set('view engine', 'ejs');
app.set('views', `${__dirname}/views`);
app.set('layout', 'layout/layout');
app.use(expressLayouts);
app.use(express.static('public'));
app.use(express.urlencoded({ extended: true }));
app.use(express.json({ limit: '1mb' }));
app.listen(port, () => console.log(`Server started on port ${port}`));
const registerRoute = require('./routes/register');
app.use('/', registerRoute);
const viewRecordsRoute = require('./routes/viewRecords');
app.use('/viewRecords', viewRecordsRoute);
viewRecordsRoute.js
const express = require('express');
const router = express.Router();
const Datastore = require('nedb');
const bneDB = new Datastore('databases/BNE.db');
const sscDB = new Datastore('databases/SSC.db');
bneDB.loadDatabase();
sscDB.loadDatabase();
router.get('/', (request, response) => {
response.render('viewRecords.ejs');
});
router.get('/:id', (request, response) => {
if (request.params.id == "bne") {
bneDB.find({}, (err, output) => {
if (err) {
console.log(err);
return;
}
response.render('siteRecords.ejs', {
site: 'Redbank',
records: output
});
return;
});
}
else {
sscDB.find({}, (err, output) => {
if (err) {
console.log(err);
return;
}
response.render('siteRecords.ejs', {
site: 'Column',
records: output
});
return;
});
}
});
module.exports = router;
我相信这是 nedb 的局限性。 当我删除 nedb 时,一切正常。 我将数据库的大小减半,一切正常。 我最终迁移到 mongo db,一切正常。 看来我真的已经达到了 nedb 的极限。
我已经在较小的项目中使用 nedb 很长一段时间了,没有出现任何问题。 这恰好变得越来越大。
在您的示例中,有问题的路由是运行数据库查询的路由。如果发生错误,您只需 console.log 错误,但不会将任何内容作为响应返回到浏览器。不要单独使用
return;
,而是尝试使用 return response.send(err);
,这样可以确保始终将某些内容发送到浏览器。
当然,你也可以通过其他方式处理错误。