Files
Myrient-Search-Engine/server.js

64 lines
1.8 KiB
JavaScript
Raw Normal View History

2024-10-17 00:12:16 -06:00
import getAllFiles from './lib/dircrawl.js'
import {parseJsonFile, saveJsonFile, fileExists} from './lib/loadfiles.js'
2024-10-17 00:12:16 -06:00
import Searcher from './lib/search.js'
import cron from 'node-cron'
import FileOlderThan from 'file-older-than'
2024-10-15 21:03:27 -06:00
import 'dotenv/config'
import express from 'express'
import http from 'http'
2024-10-17 00:12:16 -06:00
import sanitize from 'sanitize'
var fileListPath = './filelist.json'
2024-10-17 00:12:16 -06:00
var categoryListPath = './lib/categories.json'
var categoryList = await parseJsonFile(categoryListPath)
var fileList = []
async function getFilesJob(){
console.log('Updating the file list.')
2024-10-17 00:12:16 -06:00
fileList = await getAllFiles(categoryList)
saveJsonFile(fileListPath, fileList)
if(search){
search.createIndex(fileList) //recreate the search index
}
console.log(`Finished updating file list. ${fileList.length} found.`)
}
2024-10-17 00:12:16 -06:00
if(process.env.FORCE_FILE_REBUILD == "1" || !fileExists(fileListPath) || FileOlderThan(fileListPath, '1d')){
await getFilesJob()
}
else{
fileList = await parseJsonFile(fileListPath)
}
2024-10-17 00:12:16 -06:00
var search = new Searcher(fileList)
2024-10-15 21:03:27 -06:00
var app = express();
var server = http.createServer(app);
2024-10-17 00:12:16 -06:00
app.use(sanitize.middleware)
2024-10-15 21:03:27 -06:00
app.set('view engine', 'ejs')
app.get('/', function(req, res) {
2024-10-15 23:26:39 -06:00
res.render('pages/index', {
page: 'search'
})
})
app.get('/search', function(req, res) {
2024-10-17 00:12:16 -06:00
let results = search.findAllMatches(req.query.q)
if(process.env.DEBUG == "1"){
2024-10-16 03:25:31 -06:00
console.log(results)
}
2024-10-15 23:26:39 -06:00
res.render('pages/index', {
page: 'results',
query: req.query.q,
results: results
2024-10-15 23:26:39 -06:00
})
2024-10-15 21:03:27 -06:00
})
server.listen(process.env.PORT, process.env.BIND_ADDRESS)
server.on('listening', function() {
console.log('Server started on %s:%s.', server.address().address, server.address().port)
})
console.log(`Loaded ${fileList.length} known files.`)
cron.schedule('0 0 0 * * *', getFilesJob)