链接到另一个html文件适用于localhost,但不是在我上传到服务器上时

时间:2017-10-27 20:58:45

标签: javascript html node.js express twitter

我的文件夹结构如下所示:已更新

/public
  twitter.html
  /styles
    styles.css
/views
  index.html
server.js
package.json 

我有一个链接到twitter.html的index.html。我在.js文件中使用Express和Node.js,所以我这样链接:

<a href="/twitter">Twitter</a>

我无法使用<a href="twitter.html">Twitter</a>因为它无法使用Express,它只会给我这个:https://imgur.com/a/DL9aM(在网络浏览器上)它应该是这样的:https://imgur.com/a/lyHja (在localhost上)

当我运行localhost时,一切都按预期工作,我点击Twitter的链接,它的工作原理。我从http://localhost:3000/转到http://localhost:3000/twitter

然而,当我在我的网络浏览器上打开index.html然后点击Twitter的链接时,它会显示“找不到您的文件”。我从file:///Users/name/twitter/views/index.html转到file:///twitter

当我将这些文件上传到网络服务器并点击推文链接时,它会显示“未找到在此服务器上找不到请求的网址/推特。”。我从http://mypage.com/myusername/views/index.html转到http://mypage.com/twitter

知道我做错了什么因为在localhost上运行时一切正常吗?

我的script.js如下所示:已更新

const express = require('express')
const bodyParser = require('body-parser')
const MongoClient = require('mongodb').MongoClient
const path = require('path')

const app = express()
let db

MongoClient.connect('mongodb://someuser:somepassword@cluster0-shard-00-00-fquoc.mongodb.net:27017,cluster0-shard-00-01-fquoc.mongodb.net:27017,cluster0-shard-00-02-fquoc.mongodb.net:27017/twitter?ssl=true&replicaSet=Cluster0-shard-0&authSource=admin', (err, database) => {
  if (err) return console.log(err)
  db = database
  app.listen(3000, () => {
    console.log('listening on 3000')
  })
})

app.engine('html', require('ejs').renderFile)
app.set('view engine', 'html')
app.set('views', path.join(__dirname, 'views'));
app.use(bodyParser.urlencoded({extended: true}))
//app.use(express.static(path.join(__dirname, 'public')));
//app.use('/public', express.static(path.join(__dirname, 'public')))

app.get('/public/twitter', (req, res) => {
  db.collection('tweets').find().toArray((err, result) => {
    if (err) return console.log(err)
    res.send('/public/twitter.html')
  })
})

app.get('/', (req, res) => {
    return res.render('index');
   });

app.post('/tweets', (req, res) => {
  db.collection('tweets').save(req.body, (err, result) => {
    if (err) return console.log(err)

    console.log('saved to database')
    res.redirect('/twitter')
  })
})

1 个答案:

答案 0 :(得分:1)

如果您的推特页面位于/ views文件夹内,则相应地访问它。  <a href="/views/twitter.html> Twitter </a>

更新:现在您发布了您的问题路由代码。 app.use(express.static(path.join(__dirname, 'public'))); https://expressjs.com/en/starter/static-files.html

app.use('/public', express.static(path.join(__dirname, 'public')))

摆脱你的观点并将推特页面粘贴在公共目录中,然后执行/ public / twitter,你会没事的

app.get('/public/twitter', (req, res) => {
  db.collection('tweets').find().toArray((err, result) => {
    if (err) return console.log(err)
    res.sendFile( __dirname + "/public/" + "twitter.html" );
  })
})