我的文件夹结构如下所示:已更新
/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')
})
})
答案 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" );
})
})