简体   繁体   中英

cannot GET / when serving Angular app using express and nodejs

I am trying to serve an angular app using nodejs. But i get this error "Cannot GET /" in the body of the page. I tried a number of things but still this does not work. do you folks have any suggestion?

const express = require('express')
const app = express()
var cors = require('cors')
const bodyParser = require('body-parser')
const fileUpload = require('express-fileupload')

const couchDb = require('./modules/couchDb')
const db = couchDb.db
const schedules = require('./modules/schedules')
const stations = require('./modules/stations')
const testConfigs = require('./modules/testConfigs')

app.use(cors())
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({extended: true}))
app.use(fileUpload())

app.listen(5000, () => console.log('Listening on port 5000'))


////////////////////////////////////////
// View
////////////////////////////////////////
const viewOptions = { include_docs: true }
app.route('/api/schedules').get((req, res) => {
    couchDb.getType('schedule', viewOptions).then(docs => {
        res.send(docs)
    }).catch(err => {
        console.log(err)
        res.send({})
    })
})

app.route('/api/stations').get((req, res) => {
    couchDb.getType('station', viewOptions).then(docs => {
        res.send(docs)
    }).catch(err => {
        console.log(err)
        res.send({})
    })
})

app.route('/api/tests').get((req, res) => {
    couchDb.getType('testConfig', viewOptions).then(docs => {
        res.send(docs)
    }).catch(err => {
        console.log(err)
        res.send({})
    })
})

you are missing your routes eg

app.get('/', function (req, res) {
      res.send('hello world')
  })

or you need to include your all routes through middle ware.

You are getting that error because you are not declaring any endpoints or telling the server to serve anything. It is listening on port 5000, but no responses to any urls have been defined. Here is a piece of example code that will resolve your issue.

const express = require('express')
const app = express()
var cors = require('cors')
const bodyParser = require('body-parser')
const fileUpload = require('express-fileupload')


app.use(cors())
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({extended: true}))
app.use(fileUpload())

// This block will make it so that every path on port 5000 responds with "Hello, World!"
app.get('*', (req, res) => {
    res.status(200).send("Hello, World!");
});

app.listen(5000, () => console.log('Listening on port 5000'))

This will make it respond with basic text, if you want to serve an angular application, you will need to look into serving static content from express: https://expressjs.com/en/starter/static-files.html

You have to use a routing middleware and map your modules to the required modules.Also make sure your modules are mounted in router instance.

Something like

const express = require('express')
const app = express()
var cors = require('cors')
const bodyParser = require('body-parser')
const fileUpload = require('express-fileupload')

const couchDb = require('./modules/couchDb')
const db = couchDb.db
const schedules = require('./modules/schedules')
const stations = require('./modules/stations')
const testConfigs = require('./modules/testConfigs')

app.use(cors())
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({extended: true}))
app.use(fileUpload())

//All requests with /schedules will go to './modules/schedules' 
app.use('/schedules', schedules);
app.use('/stations', stations);

app.listen(5000, () => console.log('Listening on port 5000'))

your ./modules/station should look like

var express = require('express')
var router = express.Router()

router.get('/', function (req, res) {
  res.send('You are in /station')
})
router.get('/new', function (req, res) {
  res.send('You are in /station/new')
})

module.exports = router

For more : https://expressjs.com/en/guide/routing.html

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM