routes controller model 关系
比如 planets.router.js
const express = require('express');
const {httpGetAllPlanets} = require('./planets.controller')
const planetRouter = express.Router();
planetRouter.get('/', httpGetAllPlanets);
module.exports = planetRouter;
planets.controller.js
const {getAllPlanets} = require('../../models/planets.model')
async function httpGetAllPlanets(req, res){
// status 200 express 会默认返回 但是还是 明确写出来更好
return res.status(200).json(await getAllPlanets())
}
module.exports = {
httpGetAllPlanets
}
planets.model.js
const parse = require('csv-parse');
const fs = require('fs');
const path = require('path');
const planets = require('./planets.mongo');
// 宜居星球 条件
function isHabitablePlanet(planet){
return planet['koi_disposition'] === 'CONFIRMED'
&& planet['koi_insol'] > 0.36 && planet['koi_insol'] < 1.11
&& planet['koi_prad'] < 1.6
}
function loadPlanetsData(){
return new Promise((resolve, reject) =>{
// fs.createReadStream('data/kepler_data.csv')
fs.createReadStream(path.join(__dirname, '..', '..','data','kepler_data.csv'))
.pipe(parse.parse({
comment:'#',
columns: true
}))
.on('data', async (data) => {
if(isHabitablePlanet(data)){
// results.push(data);
// await planets.create({ // 但问题是 会重复多次创建
// keplerName: data.kepler_name,
// });
// 只创建 一次 使用 updateOne
await planets.updateOne({
keplerName: data.kepler_name,
},{
keplerName: data.kepler_name,
},{
upsert: true,
})
}
})
.on('error', err => {
console.error(`Could not save planet ${err}`);
reject(err);
})
.on('end', async () => {
// console.log(results.map((planet) => {
// return planet['kepler_name']
// }));
const countPlanetsFound = (await getAllPlanets()).length;
console.log(`${countPlanetsFound} habitable planets found!`);
resolve()
})
})
}
async function getAllPlanets(){
// return results
return await planets.find({},
{
"_id":0,
"__v":0
}
)
}
module.exports = {
loadPlanetsData,
getAllPlanets
}
项目 外层 启动 里面两个项目
项目架构
上班的你
仓库 代码
点点 star 呗 客官 ~