使用Express和Node.js服务Angular应用时无法获取/

时间:2018-12-29 04:46:17

标签: javascript node.js angular express server

我正在尝试使用nodejs服务一个有角度的应用程序。但是我得到这个错误 页面正文中的“无法获取/”。我尝试了很多方法,但是仍然无法正常工作。你们有什么建议吗?

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({})
    })
})

3 个答案:

答案 0 :(得分:0)

您缺少路线,例如

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

或者您需要包括所有通过中间件的路由。

答案 1 :(得分:0)

由于没有声明任何端点或不通知服务器提供任何服务,因此出现该错误。它正在侦听端口5000,但是尚未定义对任何URL的响应。这是一段示例代码,可以解决您的问题。

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'))

这将使它以基本文本作为响应,如果要提供一个有角度的应用程序,则需要研究从express:https://expressjs.com/en/starter/static-files.html

提供静态内容。

答案 2 :(得分:0)

您必须使用路由中间件并将模块映射到所需的模块。还要确保您的模块已安装在路由器实例中。

类似

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'))

您的./modules/station应该看起来像

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

更多信息:https://expressjs.com/en/guide/routing.html