An alternative to using promises directly is to use await/async. 
// weather.js  
const yrno = require('yr.no-forecast')({
  version: '1.9', // this is the default if not provided,
  request: {
    // make calls to locationforecast timeout after 15 seconds
    timeout: 15000
  }
});
const LOCATION = {
  // This is Dublin, Ireland
  lat: 53.3478,
  lon: 6.2597
};
async function getWeather() {
  let weather = await yrno.getWeather(LOCATION);
  let fiveDaySummary = await weather.getFiveDaySummary();
  let forecastForTime = await weather.getForecastForTime(new Date());
  return {
    fiveDaySummary: fiveDaySummary,
    forecastForTime: forecastForTime,
  }
}
async function main() {
  let report;
  try {
    report = await getWeather();
  } catch (e) {
    console.log('an error occurred!', e);
  }
  // do something else... 
  if (report != undefined) {
    console.log(report); // fiveDaySummary and forecastForTime
  }
}
main(); // run it
you can run this (node.js 7) with: 
node --harmony-async-await weather
You can use await/async on older targets by using Babel or Typescript to transpile it down for you. 
Bonus (based off your comments) - I wouldn't do it this way, but just to show you it can be done: 
const http = require('http');
const port = 8080;
http.createServer(
  async function (req, res) {
    let report = await getWeather(); // see above
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.write("" + JSON.stringify(report.fiveDaySummary));
    res.end('Hello World\n');
  })
  .listen(port);

again with node --harmony-async-await weather or transpile it.