【问题标题】:Display "Server running on port 5000 " on the console but canno't get [duplicate]在控制台上显示“服务器在端口 5000 上运行”但无法获取 [重复]
【发布时间】:2021-06-29 16:50:57
【问题描述】:

API 后端具有以下模板: template 后端代码如下: 请注意,我在 mangodb cloud 上更改了我自己的凭据的用户名和密码。

index.js

import express from 'express';
import bodyParser from 'body-parser';
import mongoose from 'mongoose';
import cors from 'cors';

import postRoutes from './routes/posts.js';

const app = express();

app.use(bodyParser.json({ limit: '30mb', extended: true }))
app.use(bodyParser.urlencoded({ limit: '30mb', extended: true }))
app.use(cors());

app.use('/posts', postRoutes);



const CONNECTION_URL = 'mongodb+srv://user:password@cluster0.fawpw.mongodb.net/authDB?retryWrites=true&w=majority';
const PORT = process.env.PORT|| 5000;

mongoose.connect(CONNECTION_URL, { useNewUrlParser: true, useUnifiedTopology: true })
  .then(() => app.listen(PORT, () => console.log(`Server Running on Port: http://localhost:${PORT}`)))
  .catch((error) => console.log(`${error} did not connect`));

mongoose.set('useFindAndModify', false);

controllers/posts.js

import express from 'express';
import mongoose from 'mongoose';

import PostMessage from '../models/postMessage.js';

const router = express.Router();

export const getPosts = async (req, res) => { 
    try {
        const postMessages = await PostMessage.find();
                
        res.status(200).json(postMessages);
    } catch (error) {
        res.status(404).json({ message: error.message });
    }
}

export const getPost = async (req, res) => { 
    const { id } = req.params;

    try {
        const post = await PostMessage.findById(id);
        
        res.status(200).json(post);
    } catch (error) {
        res.status(404).json({ message: error.message });
    }
}

export const createPost = async (req, res) => {
    const { title, message, selectedFile, creator, tags } = req.body;

    const newPostMessage = new PostMessage({ title, message, selectedFile, creator, tags })

    try {
        await newPostMessage.save();

        res.status(201).json(newPostMessage );
    } catch (error) {
        res.status(409).json({ message: error.message });
    }
}

export const updatePost = async (req, res) => {
    const { id } = req.params;
    const { title, message, creator, selectedFile, tags } = req.body;
    
    if (!mongoose.Types.ObjectId.isValid(id)) return res.status(404).send(`No post with id: ${id}`);

    const updatedPost = { creator, title, message, tags, selectedFile, _id: id };

    await PostMessage.findByIdAndUpdate(id, updatedPost, { new: true });

    res.json(updatedPost);
}

export const deletePost = async (req, res) => {
    const { id } = req.params;

    if (!mongoose.Types.ObjectId.isValid(id)) return res.status(404).send(`No post with id: ${id}`);

    await PostMessage.findByIdAndRemove(id);

    res.json({ message: "Post deleted successfully." });
}

export const likePost = async (req, res) => {
    const { id } = req.params;

    if (!mongoose.Types.ObjectId.isValid(id)) return res.status(404).send(`No post with id: ${id}`);
    
    const post = await PostMessage.findById(id);

    const updatedPost = await PostMessage.findByIdAndUpdate(id, { likeCount: post.likeCount + 1 }, { new: true });
    
    res.json(updatedPost);
}


export default router;

models/postMessage.js

import mongoose from 'mongoose';

const postSchema = mongoose.Schema({
    title: String,
    message: String,
    creator: String,
    tags: [String],
    selectedFile: String,
    likeCount: {
        type: Number,
        default: 0,
    },
    createdAt: {
        type: Date,
        default: new Date(),
    },
})

var PostMessage = mongoose.model('PostMessage', postSchema);

export default PostMessage;

routes/posts.js

import express from 'express';

import { getPosts, getPost, createPost, updatePost, likePost, deletePost } from '../controllers/posts.js';

const router = express.Router();

router.get('/', getPosts);
router.post('/', createPost);
router.get('/:id', getPost);
router.patch('/:id', updatePost);
router.delete('/:id', deletePost);
router.patch('/:id/likePost', likePost);

export default router;

**问题是:当我在服务器端运行命令“npm start”时,控制台显示“服务器在端口 5000 上运行”但是当我打开链接时它显示消息“无法获取“(检查所附图片)。我检查了所有目录是否正确设置,但我找不到错误!在开发者工具上只输出“error 404”**有什么想法吗?

console

browser

【问题讨论】:

  • 它输出另一个错误“加载资源失败:服务器响应状态为 favico.ico 404 (Not Found)”
  • 关于图标的错误可以忽略。浏览器会尝试加载网站图标,但由于这是一个 API,您无需提供网站图标。

标签: javascript node.js express http-status-code-404 web-development-server


【解决方案1】:

您为/posts 添加了路由器

app.use('/posts', postRoutes);

您可以通过

访问此路由器
localhost:5000/posts

如果你想访问这个路由器

localhost:5000/

你可以添加它

app.use(postRoutes);

【讨论】:

    【解决方案2】:

    您已将 postRoutes 安装到 '/posts' 端点。因此,无论routes/posts.js 中指定的端点如何,它都会在/posts 上扩展。因此,当您执行getPosts() 时,它不会在'/' 端点上调用,而是在/posts/ 端点上调用,因为整个路由器都安装在'/posts' 端点上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-31
      • 2016-06-27
      • 2021-09-16
      • 2019-08-29
      • 2020-01-01
      • 2015-05-27
      • 2015-11-11
      • 2013-02-19
      相关资源
      最近更新 更多