学前端,找工作,点这里

1. 在你的nodejs项目路径下初始化

npm init

然后一路回车就可以了,只不过这样的话启动文件必须是app.js,想改的话不要一路回车,因为中途会有个输入文件名的提示

 

2. 使用npm包管理器安装express和http中间件代理模块

npm install  express  http-proxy-middleware --save-dev

3. 新建app.js,输入如下代码

var express = require('express');
const proxy = require('http-proxy-middleware');
const app = express();
app.set('port', '809');           // 你NodeJs代理端口

var options = {
        target: 'http://localhost:8090',    //  你服务器端口
        changeOrigin: true,
    };
var exampleProxy = proxy(options);
app.use('/', exampleProxy);              //  ‘/’ 表示对所有请求代理
app.listen(app.get('port'), () => {
 console.log(`server running @${app.get('port')}`);
});

弄完后结构大致是这样的

4. 启动NodeJs

node app.js

再次请求8090端口,这次果然好了....... 不对,好像还有什么问题

报错 No 'Access-Control-Allow-Origin' header ,原来是809、8090请求跨了端口 ,属于跨域问题


NodeJs解决跨域请求

将上面的代码添加跨域处理部分,代码如下

var express = require('express');
const proxy = require('http-proxy-middleware');
const app = express();
app.set('port', '809');

app.all('*', function (req, res, next) {    // 解决跨域问题
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Content-Type,Content-Length, Authorization, Accept,X-Requested-With");
    res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");    
    if (req.method == "OPTIONS") {
        res.send(200);       
    } else {
        next();
    }
});

var options = {
        target: 'http://localhost:8090',
        changeOrigin: true,
    };
var exampleProxy = proxy(options);
app.use('/', exampleProxy);
app.listen(app.get('port'), () => {
 console.log(`server running @${app.get('port')}`);
});

再次启动NodeJs,发现问题已经没了


其他

再次启动NodeJs时可能会报错端口占用,虽然挺好解决但是还是提一下,使用 lsof -i:809 可以找出809端口进程的PID,然后用kill -9 干掉即可

如果直接node app.js启动此时终端是卡住的,一按键就可能断开,也干不了其他事,这里可以使用 & 开启后台进程

node app.js &

后面加一个 & 表示启用后台进程,这样你就可以不用管它了,当然,如果你是宝塔面板,你也可以用PM2管理你的NodeJs项目

点击启动即可

学完还想练练?点这里