首页 > 解决方案 > 如何仅在 Nodejs 中编写与 app.get('/') 相同的功能

问题描述

我正在使用javascriptand构建应用程序node.js

当我想打开主页时,我会这样做express

app.get('/', function(req, res){
  res.sendFile(__dirname + '/index.html');
});

这样,当我打开主页时,它会返回我index.html

但我想知道如何只用Nodejswithout做同样的事情express

我想我需要先创建服务器,然后index.html在请求时以某种方式返回页面/,尽管我不确定这种方法是否正确。

const server = http.createServer((req, res) => {
  res.setHeader("Access-Control-Allow-Origin", "*");
});

server.on('request', (request, response)=> {
  if (requsest.url == '/') {
    response.end('index.html')
  }
 });

上面写的代码是我的思考方式,可能不是正确的方式,所以请如果有人能给我想法或解决方案,我应该如何在Nodejs.

提前致谢 :)

标签: node.jsexpress

解决方案


它只是呈现一个静态文件index.html

const http = require('http');
const fs = require('fs');
fs.readFile('./index.html', function(err, html) {
    if (err) {
        throw err;
    }
    http.createServer(function(request, response) {
        response.writeHeader(200, {
            "Content-Type": "text/html"
        });
        response.write(html);
        response.end();
    }).listen(3000);
});

假设您的文件夹结构

project root 
     ├── server.js
     ├── package.json 
     └── index.html 

对于Node.js不使用框架的基本路由express。您需要设置您的server.js文件,以便switch为各种路线使用案例块。简单示例:

const http = require('http');
const fs = require('fs');
const port = 3000;
const server = http.createServer((req, res) => {
    let htmlFile = '';
    switch (req.url) {
        case '/':
            htmlFile = 'index.html';
            break;
        case '/about':
            htmlFile = 'about.html';
            break;
        default:
            break;
    }
    if (htmlFile)
        render(res, htmlFile);
});

function render(res, htmlFile) {
    fs.stat(`./${htmlFile}`, (err, stats) => {
        res.statusCode = 200;
        res.setHeader('Content-Type', 'text/html');
        if (stats) {
            fs.createReadStream(htmlFile).pipe(res);
        } else {
            res.statusCode = 404;
            res.end('Page not found!');
        }
    });
}
  • index.html关于访问根路径/
  • about.html在访问/about.

推荐阅读