爱知乎 - 知乎日报网页版 Nodejs 相关内容探讨

爱知乎 - 知乎日报网页版 Nodejs 相关内容探讨

传送门: 爱知乎 之前写了个几十行的 知乎日报,被吐槽太简陋,于是乎花了点时间用Express重写了一个,取名 爱知乎,调教了一下在各浏览器中的表现(当然主要是IE),欢迎吐槽

10 回复

爱知乎 - 知乎日报网页版 Node.js 相关内容探讨

传送门:

背景介绍:

之前我写了一个简单的知乎日报网页版应用,但由于功能过于简陋,收到了一些反馈。为了改进用户体验,我决定使用 Express 框架重新编写一个版本,并将其命名为 “爱知乎”。这次,我特别关注了不同浏览器的表现,尤其是 IE 浏览器,希望它能在各种设备上都能流畅运行。

技术栈:

  • Node.js:后端服务器框架。
  • Express:用于构建 Web 应用的中间件框架。
  • Axios:用于发送 HTTP 请求获取数据。
  • EJS:模板引擎,用于渲染页面。

示例代码:

1. 安装依赖:

首先,确保安装了所需的 Node.js 包:

npm install express axios ejs body-parser
2. 创建 Express 应用:

创建一个 app.js 文件,初始化 Express 应用并配置路由:

const express = require('express');
const axios = require('axios');
const bodyParser = require('body-parser');
const app = express();
const port = process.env.PORT || 3000;

// 设置模板引擎
app.set('view engine', 'ejs');

// 使用 body-parser 中间件
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

// 主页路由
app.get('/', async (req, res) => {
    try {
        const response = await axios.get('https://newsapi.org/v2/top-headlines?country=us&apiKey=YOUR_API_KEY');
        const articles = response.data.articles;
        res.render('index', { articles });
    } catch (error) {
        console.error(error);
        res.status(500).send('Server Error');
    }
});

// 启动服务器
app.listen(port, () => {
    console.log(`Server running on http://localhost:${port}`);
});
3. 创建 EJS 模板:

在项目中创建一个 views 文件夹,并在其中创建 index.ejs 文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>爱知乎 - 知乎日报</title>
</head>
<body>
    <h1>知乎日报</h1>
    <ul>
        <% articles.forEach(article => { %>
            <li>
                <h2><a href="<%= article.url %>"><%= article.title %></a></h2>
                <p><%= article.description %></p>
            </li>
        <% }) %>
    </ul>
</body>
</html>

总结:

通过使用 Express 和 EJS,我们可以快速搭建一个功能完善的知乎日报网页版应用。同时,通过优化前端样式和后端逻辑,可以显著提升用户体验,尤其是在兼容性较差的浏览器如 IE 上。欢迎大家访问 爱知乎 并提出宝贵的意见和建议。


有个小小的建议。 要么文字说话,要么图片说话,所以: 我试着改了一下文字大小,不知道楼主觉得怎么样?

之前


之前

之后


之前

赞一个

求共享源码~

敢问大侠用的什么浏览器,怎么变粗体了,雅黑粗体不好看,字体大小我觉得现在还好吧,主要是标题,图片只不过是点缀而已

http://cnodejs.org/topic/533bc12f9a57a00b7900fb35 其实核心的东西就这点,现在只不过是多加了一层皮而已

赞一个

赞一个

你这么做,知乎知道吗?

回答内容

爱知乎 - 知乎日报网页版 Node.js 相关内容探讨

首先,感谢大家对我的小项目《爱知乎》的关注。这个项目是基于Node.js和Express框架来实现的,旨在提供一个轻量级的知乎日报网页版。下面我会简单介绍一些技术细节以及如何构建这样的应用。

技术栈

  • Node.js:用于后端服务。
  • Express:作为Web框架。
  • axios:用于发送HTTP请求获取知乎日报数据。
  • EJS:作为模板引擎。
  • Bootstrap:用于快速构建响应式页面布局。

项目结构

izhihu/
├── app.js
├── package.json
├── views/
│   ├── index.ejs
│   └── ...
└── public/
    ├── css/
    │   └── styles.css
    ├── js/
    │   └── script.js
    └── images/
        └── logo.png

示例代码

  1. 安装依赖

    在项目根目录下运行:

    npm install express axios ejs bootstrap
    
  2. app.js

    const express = require('express');
    const axios = require('axios');
    const app = express();
    const PORT = process.env.PORT || 3000;
    
    // 设置视图引擎为 EJS
    app.set('view engine', 'ejs');
    
    // 静态文件目录
    app.use(express.static('public'));
    
    // 路由处理
    app.get('/', async (req, res) => {
      try {
        const response = await axios.get('https://news-at.zhihu.com/api/4/stories/latest');
        const data = response.data;
        res.render('index', { stories: data.stories });
      } catch (error) {
        console.error(error);
        res.status(500).send('Internal Server Error');
      }
    });
    
    app.listen(PORT, () => {
      console.log(`Server is running on http://localhost:${PORT}`);
    });
    
  3. views/index.ejs

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>爱知乎</title>
      <link rel="stylesheet" href="/css/bootstrap.min.css">
    </head>
    <body>
      <div class="container">
        <h1 class="mt-5">爱知乎 - 知乎日报</h1>
        <ul class="list-group mt-3">
          <% stories.forEach(story => { %>
            <li class="list-group-item">
              <a href="<%= story.url %>"><%= story.title %></a>
            </li>
          <% }) %>
        </ul>
      </div>
      <script src="/js/bootstrap.bundle.min.js"></script>
    </body>
    </html>
    

总结

以上代码展示了一个简单的知乎日报网页版的基本结构。你可以根据需要添加更多的功能,比如分页、评论区等。希望这能对你有所帮助!


如果还有其他具体问题或需要进一步讨论的地方,欢迎随时留言。

回到顶部